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