20

我相信,我的Git存储库状况不佳,其中当我执行

git fsck

我在顶部收到以下警告。

103b5dd53f7a96f8e3a02aea0d3d4d9bb19644ed: contains zero-padded file modes
bb4729593e76f66b46292ad6ae61bfe909558337: contains zero-padded file modes
4709aa73691ce7da36dd22ccfd157c4514395330: contains zero-padded file modes

我尝试了以下(由同事建议)来查找有问题的提交,以便我可以纠正它们。我尝试了以下方法。

  1. 浏览所有来自git rev-list HEAD.
  2. 对于这些提交中的每一个,执行 agit ls-tree -rd以查找所有相关对象SHAs
  3. 看看其中是否有与git fsck.

上面的逻辑对我来说似乎是正确的,但它无法找到有问题的提交。

git rev-list --all --remotes | while read commit; do git ls-tree -rd $commit | grep -E "103b5dd53f7a96f8e3a02aea0d3d4d9bb19644ed|bb4729593e76f66b46292ad6ae61bfe909558337|4709aa73691ce7da36dd22ccfd157c4514395330" && echo -e "HIT @ $commit\n\n"; done

我们在这里缺少什么?我们如何才能找到有问题的提交或文件有问题?最后,我想修复存储库。

4

2 回答 2

20

从评论中添加解决方法作为答案:

使用重新构建存储库git fast-export,然后git fast-import解决问题,但 SHA 值会发生变化,并且不会带来树引用。

创建一个新的空存储库:

mkdir /newrepo
cd /newrepo
git init

回到带有 fsck 警告的旧版本:

cd /oldrepo

使用旧数据的快速导出将数据通过管道传输到新存储库中的快速导入

git fast-export --all | (cd /newrepo && git fast-import)
于 2013-02-12T18:16:28.720 回答
5

只是对@9000 答案的补充:

在 中创建一个空的 git 存储库../newrepo,然后

git fast-export --signed-tags=strip --all | (cd ../newrepo/ && git fast-import)
于 2016-10-12T04:45:34.917 回答