克隆/从具有损坏HEAD的Git存储库中获取

时间:2015-12-17 22:10:50

标签: git

我的任务是从公司的许多Git服务器复制Git存储库作为辅助备份(腰带和吊带,你知道)。但我发现有数百个存储库,其中HEAD指向一个不存在的地方。例如:

$ git clone --bare somehost:/some/path/to/broken.git
Cloning into bare repository 'broken.git'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done
$ cd broken.git
$ git fetch
fatal: Couldn't find remote ref HEAD

发生这种情况的一种情况是远程存储库是完全空的。我添加了代码来检测这种情况并避免克隆这些情况,但仍有数百个(即,这些存储库中存在实际提交但HEAD未指向有效位置)。

如果我可以控制远程服务器(我很少这样做),如何修复它?我是否应该更改HEAD以包含对我在refs / heads下看到的任何有效头部的引用?

现在,假设修复是不可能的,我该如何缓解?据我所知,我有以下选择:

  1. 检测具有损坏的HEAD的远程存储库并跳过它们。
  2. 运行“git fetch”时,请忽略上述任何错误。
  3. 查找可以避免此问题的一些标志组合
  4. 保持原样,并试图强制远程团队修复他们的存储库(政治解决方案)
  5. 似乎1或2的潜在问题是我可能会错过存储库或对实际包含有意义更改的存储库的更改。

    仅供参考:我正在运行git 1.8.4,并且远程端会有所不同,尽管目前的情况是1.7.1。

1 个答案:

答案 0 :(得分:1)

如果您有权访问远程存储库,则应检查.git / HEAD

我也会跑

git-show-ref --heads

看看它们是否为空。编辑.git / HEAD并将其设置为某个现有的ref或commit。

可能会有效

无论如何,为了避免将来一次又一次地处理同样的问题,我会去选项4并尝试向远程团队寻求帮助来克隆他们的存储库。他们还应该能够告诉你哪个参考应该进入HEAD。