看来,一些文件被损坏了我的远程混帐服务器上,我得到以下错误,当我尝试回购复制到新系统。
remote: error: Could not read c168e82dd62c0cdbf3ea7c3be3a84218a12c8a03
remote: fatal: Failed to traverse parents of commit 02d8c9217333d89afd61da1788fa82329b692610
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header
当我运行一个git fsck --name-objects
:
broken link from commit 02d8c9217333d89afd61da1788fa82329b692610 (~17)
to commit c168e82dd62c0cdbf3ea7c3be3a84218a12c8a03 (~18)
我有没有错误回购的本地副本,有没有办法把刚才复制的丢失或损坏的文件?
这并不是说缺少了这么多的文件或损坏,那就是内部对象(提交02d8c9217333d89afd61da1788fa82329b692610
在服务器上)是指另一个内部对象(c168e82dd62c0cdbf3ea7c3be3a84218a12c8a03
)是缺少。虽然一些对象存储在单独的文件,其它的包装:成千上万个对象在一个文件中。
如果你有对象c168e82dd62c0cdbf3ea7c3be3a84218a12c8a03
你可以从自己的仓库提取出来,送过来,并将其插入到另一个仓库。然而,这通常是比刚刚重新克隆了良好的仓库了很多困难(只要它拥有一切,不是每一个克隆将是完整的,例如,它可能是过时的,或者它可能是一个--single-branch
克隆)。
要提取一个对象,首先找到它的类型:
git cat-file -t c168e82dd62c0cdbf3ea7c3be3a84218a12c8a03
然后提取其原始数据:
git cat-file -p c168e82dd62c0cdbf3ea7c3be3a84218a12c8a03 > /tmp/obj.data
在复制对象的数据,并将其插入到仓库:
scp /tmp/obj.data serverhost:/tmp/obj.data
ssh serverhost
cd ...
git hash-object -w -t $type /tmp/obj.data
其中$type
是git cat-file -t
的机器上存储库的完好副本类型。
(添加缺少的对象可以解决一切,或者可能只是暴露了更多的问题,这是另一个原因,它往往只是最好与其他克隆完全替代坏库)。
因为我有一个最新的资料库我的本地PC上,我结束了克隆与--bare参数库和更新这些文件的服务器。
git clone --bare <path to clone from> <path to clone to>