Rehash A Corrupt Git Repo

时间:2017-09-06 08:13:09

标签: git hash corrupt

长话短说,由于产品和工作流程方面的重大调整,以及由于一些严重的数据问题,我们正在将所有内容从旧的回购转移到新的回购。即杀死旧的仓库,取出所有文件,转储到新的仓库,从头开始就Git而言。

现在,我做到了这一点,但我遇到了与旧回购相同的问题。当然也不乏问题:

error: inflate: data stream error (incorrect data check)
error: sha1 mismatch 3bf84448dc14c5773dcaaea2e5d28c099fe6cc32
error: 3bf84448dc14c5773dcaaea2e5d28c099fe6cc32: object corrupt or missing
error: sha1 mismatch 3d9d3715b55262d61a11b0b7fa9b01b3c9a6beaa
error: 3d9d3715b55262d61a11b0b7fa9b01b3c9a6beaa: object corrupt or missing
error: sha1 mismatch 525f1182a21a8e7b7d65062effe0d89c3937a2e8
error: 525f1182a21a8e7b7d65062effe0d89c3937a2e8: object corrupt or missing
error: inflate: data stream error (incorrect data check)
error: sha1 mismatch 53ad3219a54af10015ba006a895f67a29bb262e1
error: 53ad3219a54af10015ba006a895f67a29bb262e1: object corrupt or missing

手动定位这些blob的名称会显示完全正常且未损坏的文件。手动重新编写它们似乎已经修复了目标文件,但仍存在许多不匹配和其他问题。

我的所有工作来源都存在且数据很好。有没有办法从我的工作源完全重建存储库文件结构,即完全干净的Git并让它重新发送所有,还是有其他一些建议的方法?

1 个答案:

答案 0 :(得分:0)

我遇到了多次损坏git repos的问题。 强烈建议不要在project / .git文件夹中执行任何手动操作。 有时,我不知道自己做错了什么...有时,我做了grep -rl pattern | xargs sed -i 's/foo/bar/',显然我忘了排除.git / ** / *文件

在大多数情况下,我不得不放弃该回购协议,通常将其副本保存在一个墓地损坏的文件夹中;以防万一。但是我最终从不回头。通常创建一个新的克隆就可以了,因为我经常推动并把所有有价值的东西都保留在遥控器上。

但是如果您有本地分支机构或存储,则要还原。那么修复您的仓库可能很棒。

今天我找到了解决方法。

# step out
cd ..
# backup your local clone
cp -a project project-corrupted
# clone a new copy from remote
git clone remote_url project-fresh
# back a bundle backup for your git refs
(cd project-fresh; git bundle create b-all --all)
# restore on top of your corrupted repo
cd project
git bundle unbundle ../project-fresh/b-all

希望这对某人有帮助