添加损坏或删除提交到远程服务器的git

问题描述 投票:0回答:2

看来,一些文件被损坏了我的远程混帐服务器上,我得到以下错误,当我尝试回购复制到新系统。

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)

我有没有错误回购的本地副本,有没有办法把刚才复制的丢失或损坏的文件?

git bitbucket-server
2个回答
0
投票

这并不是说缺少了这么多的文件或损坏,那就是内部对象(提交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

其中$typegit cat-file -t的机器上存储库的完好副本类型。

(添加缺少的对象可以解决一切,或者可能只是暴露了更多的问题,这是另一个原因,它往往只是最好与其他克隆完全替代坏库)。


0
投票

因为我有一个最新的资料库我的本地PC上,我结束了克隆与--bare参数库和更新这些文件的服务器。

git clone --bare <path to clone from> <path to clone to>
© www.soinside.com 2019 - 2024. All rights reserved.