【发布时间】:2013-06-25 23:08:24
【问题描述】:
我有一个带有 *.pack 文件的 git repo - 没有松散的对象。 由于某种原因,与问题无关,所有 *.idx 文件都丢失了。 如何恢复它们?
谢谢
【问题讨论】:
-
你试过
git-repack吗?
我有一个带有 *.pack 文件的 git repo - 没有松散的对象。 由于某种原因,与问题无关,所有 *.idx 文件都丢失了。 如何恢复它们?
谢谢
【问题讨论】:
git-repack吗?
从树的顶部尝试运行:
git index-pack .git/objects/pack/PACK_FILENAME
其中PACK_FILENAME 是您的包文件的名称。例如,我尝试过的存储库具有以下路径:
.git/objects/pack/pack-7e0af787b3e455fac722264ff05dd0bae7d71625.pack
您应该为每个包文件执行此操作,并且您的存储库应该再次处于工作状态。
【讨论】:
ls -l .git/objects/pack 有助于显示哪些 .pack 文件缺少随附的 .idx 文件。
注意:“git index-pack --stdin”需要访问现有存储库,
但是“git index-pack file.pack”生成一个.idx文件
对应一个packfile没有。
这意味着,从 Git 2.12(2017 年第一季度)开始,您甚至可以从 Git 存储库外部恢复 idx 文件,以进行测试。
见commit 29401e1、commit a3c45d1、commit 7176a31、commit de95302(2016 年 12 月 16 日)Jeff King (peff)。
(2016 年 12 月 21 日在 commit 49d45de 中由 Junio C Hamano -- gitster -- 合并)
index-pack:不在存储库中时跳过碰撞检查
您可以在外部运行“
git index-pack path/to/foo.pack” 存储库来生成索引文件,或者只是为了验证 内容。
进行碰撞检查是没有意义的,因为 我们显然没有任何可以碰撞的物体。
【讨论】: