我有一个 git repo,我正在尝试查找磁盘上特定提交的存储位置。
git show <HASH>
显示提交。git cat-file -p <HASH>
以原始形式显示提交。- 提交不在
.git/objects/
. - 提交不在
.git/lfs/objects/
- 里面没有名字
.git/packed-refs
grep -r <HASH>
并且find -name '*<PART_HASH>*'
没有任何结果。
问题:
- 我错过了什么位置?
- 有没有找到位置的命令?
我有一个 git repo,我正在尝试查找磁盘上特定提交的存储位置。
git show <HASH>
显示提交。git cat-file -p <HASH>
以原始形式显示提交。.git/objects/
..git/lfs/objects/
.git/packed-refs
grep -r <HASH>
并且find -name '*<PART_HASH>*'
没有任何结果。问题:
Git 将对象作为松散对象存储在 的子目录下,.git/objects
或者作为打包对象存储在.git/objects/pack
. 打包对象可以更有效地存储它们,因为它们可以存储为与其他对象的增量(差异)。
如果要查找包含对象的包,可以通过将其中一个.idx
文件.git/objects/pack
传递到来列出相应的索引git show-index
。这将列出相应包中包含的对象。
例如,在我的本地副本中git/git
:
$ git show-index < .git/objects/pack/pack-0ebde31e89dd275864d40ae21ad3228a9dc7d0ea.idx | \
head -n5
116264 0049c569260e2acbe490aabd267b233e9db28e8d (f0b1bf76)
182726 005e07db39e571eb3e73fbf7e4dbe5c67ad73e1e (29e2a47f)
99906 00c6aa0351c8d3abbcbee96d50cd7a359dd68a33 (e7952421)
477311 01724db3b51dc57d9e53e753148b5fbf548aa094 (0f597941)
186631 01b76e6be63bd19e446b3ede742bff887b7e81d5 (fd3f4a72)
中心部分是对象 ID,这可能是您要查找的内容。
请注意,packed-refs
仅包含打包的 refs;如果对象不是任何 ref 的头部,则它不会出现在那里(或任何松散的 ref 文件中)。另请注意,核心 Git 不存储任何内容.git/lfs/objects
,并且 Git LFS 存储在那里的对象是与 Git 对象完全分离且独立的对象,即使存储库对对象使用 SHA-256 也是如此。