如何修复Git零填充文件模式警告

时间:2013-02-05 05:01:39

标签: git

我相信,我的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. 的所有提交
  3. 对于每次提交,请执行git ls-tree -rd查找所有相关对象SHAs
  4. 查看是否有任何内容与git fsck中的上述内容匹配。
  5. 上述逻辑对我来说似乎是正确的,但它无法找到违规的提交。

    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
    

    我们在这里缺少什么?我们怎样才能发现违规提交或文件出现问题?最后,我想修复存储库。

2 个答案:

答案 0 :(得分:16)

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

使用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)

答案 1 :(得分:2)

只需补充@ 9000的答案:

git fast-export --signed-tags=strip --all | (cd ../newrepo/ && git fast-import)