重新整理腐败的Git存储库

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

长话短说,由于产品和工作流程方面的重大重组,以及一些严重的数据问题,我们正在将所有内容从旧的仓库转移到新的仓库。即杀死旧仓库,获取所有文件,转储到新仓库,就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并重新打包everything,还是有其他建议的方法?

git hash corrupt
1个回答
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

希望这可以帮助某人

© www.soinside.com 2019 - 2024. All rights reserved.