【问题标题】:What is the complete list of location where git objects are stored on disk?git 对象存储在磁盘上的完整位置列表是什么?
【发布时间】:2021-01-17 16:24:56
【问题描述】:

我有一个 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>*' 没有任何结果。

问题:

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

【问题讨论】:

    标签: git git-plumbing


    【解决方案1】:

    Git 将对象作为松散对象存储在.git/objects 的子目录下,或者作为打包对象存储在.git/objects/pack 的其中一个包中。打包对象可以更有效地存储它们,因为它们可以存储为与其他对象的增量(差异)。

    如果要查找包含对象的包,可以通过将.git/objects/pack 下的.idx 文件之一传递到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 只包含打包的引用;如果对象不是任何 ref 的头部,则它不会出现在那里(或任何松散的 ref 文件中)。另请注意,核心 Git 不会在 .git/lfs/objects 下存储任何内容,并且 Git LFS 存储在那里的对象是与 Git 对象完全分离且独立的对象,即使存储库对对象使用 SHA-256。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      • 2011-05-21
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多