Git - 缺少文件夹“refs”

时间:2012-07-22 22:34:09

标签: git

我必须从备份中恢复一些git裸存储库,并发现git(我在wondows XP上使用msysgit)不能识别这样的repo。经过一番调查,我发现问题似乎是文件夹“refs”缺失,以及子文件夹“head”和“remotes”。我也没有文件“heads / master”。有什么方法可以重新创建吗?我真的需要恢复这些文件夹中的数据。

2 个答案:

答案 0 :(得分:4)

如果丢失了所有引用(refs文件夹),但没有丢失任何实际数据,您可以通过查找悬空提交(即未被其他提交引用的提交)找到所有可能最后提交作为父母)

您可以借助此命令

执行此操作
git fsck --lost-found

这列出了所有悬空提交(可能还有其他一些有用的信息)。 使用

git log SHA1SUM

进一步调查。 运行

也是个好主意
git fsck

确保仅引用丢失的地方。

UPD 也可以在打包参考文件中找到参考号。

答案 1 :(得分:0)

当然,如果您对这些回购有任何检查,最简单的方法就是从那些回收中恢复。


refs只包含具有这些名称指向的提交的SHA1的文件; refs/heads/master可能只是你需要的,只包含HEAD提交的SHA1。你没有丢失任何数据(全部都在objects),但找到你想要的提交的SHA1可能有点棘手。

如果你有文件logs/HEAD,那么ref应该位于底部(第一个SHA1是最近提交的父级,第二个是id的id;如果是,则可能有更多合并提交,不确定)。例如,这是我的一个回购的最后一行:

4b2ef6873c3f4c7eaebca06fee4b95ffa9cf58c3 feb84419b6685b920f8a3d61a77e9508ba5dcfe1 Dougal Sutherland <dougal@gmail.com> 1342838724 -0400 pull: Fast-forward

所以以feb84419b6开头的哈希就是我想要的哈希。不幸的是,我认为这些只是非裸露的结账。

如果您没有这些日志,则提交都在objects目录中。它有点可能是最近修改过的,你可以在ls -1t */* | head -10目录中通过objects获取它。你可以尝试一对,看看会发生什么。如果你从中得到,请说

04/718652eb1f03bb0594cc05665665b749b52a87

然后删除/以获取您要使用的哈希:

04718652eb1f03bb0594cc05665665b749b52a87