我的任务是从公司的许多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或2的潜在问题是我可能会错过存储库或对实际包含有意义更改的存储库的更改。
仅供参考:我正在运行git 1.8.4,并且远程端会有所不同,尽管目前的情况是1.7.1。
答案 0 :(得分:1)
如果您有权访问远程存储库,则应检查.git / HEAD
我也会跑
git-show-ref --heads
看看它们是否为空。编辑.git / HEAD并将其设置为某个现有的ref或commit。
可能会有效无论如何,为了避免将来一次又一次地处理同样的问题,我会去选项4并尝试向远程团队寻求帮助来克隆他们的存储库。他们还应该能够告诉你哪个参考应该进入HEAD。