0

我有一个 git repo,我正在尝试查找磁盘上特定提交的存储位置。

  1. git show <HASH>显示提交。
  2. git cat-file -p <HASH>以原始形式显示提交。
  3. 提交不在.git/objects/.
  4. 提交不在.git/lfs/objects/
  5. 里面没有名字.git/packed-refs
  6. grep -r <HASH>并且find -name '*<PART_HASH>*'没有任何结果。

问题:

  • 我错过了什么位置?
  • 有没有找到位置的命令?
4

1 回答 1

4

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 也是如此。

于 2020-10-01T22:42:33.677 回答