我正在开发一个拥有中央SVN存储库的项目。我选择Git通过git svn rebase
和git svn dcommit
处理本地任务。最近,我意识到我的本地Git仓库已经损坏 - 可能是由于硬盘故障。不幸的是,我的所有备份都显示相同的错误:历史记录在2014年10月26日之前被切断。但是,目前的结帐似乎没有损坏。
$ git log
....
commit cfccebf2d...
Author: jens
Date: Sun Oct 26 21:37:01 2014 +0000
Add profiling support
git-svn-id: svn+ssh://IP/srv/.../trunk@5800 fa8e1804-...
error: Could not read b2f50c7c1...
fatal: Failed to traverse parents of commit 01cec01c....
git fsck
也显示了很多错误:
warning in tree ae1b5217e8f9713566b5867d9fe2986af4c8c2c6: contains zero-padded file modes
warning in tree c5ce65312b1cd4d84a78f30766a21308a9d12ea1: contains zero-padded file modes
warning in tree 538e6404bd24c40ac286e6e4614db3056c3774b6: contains zero-padded file modes
warning in tree 01eb58ab73e154e2b094d3a9c2f06742c1ca9b57: contains zero-padded file modes
Prüfe Objekte: 100% (82279/82279), Fertig.
broken link from tree 258a66eaae794a83abee061fa52e87b8d9523a84
to tree b2aad577c42142cb3d26f498b346ea8ee2fa0b4b
dangling blob 7c095801143f844f6ff02484cd357a67e41f2b99
dangling blob 4112e0570791275836c68638846c7239e8dc22a4
dangling commit a41b40b6b9c39d79f5a7fb83aceca5891ec4eeae
......还有大约40多个悬空和承诺。
通过查看和重新连接悬空位来尝试修复此回购单是否有意义?或者我应该在SVN服务器上创建分支,dcommit
然后再重新克隆一次?
或者我也可以重新登记SVN仓库(git svn clone svn+ssh://IP/...
),然后将我尚未dcommit
的所有本地更改复制到新的仓库。这包括大约十个旧分支和两个具有大量提交的新分支。如果除了将所有分支作为一系列补丁文件导出并手动执行补丁+提交循环之外,还有一种干净的方法可以将一个Git存储库与另一个Git存储库从特定提交开始同步,这可能是最佳解决方案(对吗?)。
修复我的git存储库的最佳方法是什么?我在OS X Yosemite上使用Git 2.5.1。