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

Sen*_*ran 17 git

我相信,我的Git存储库状态不佳,当我做的时候

git fsck
Run Code Online (Sandbox Code Playgroud)

我在顶部收到以下警告.

103b5dd53f7a96f8e3a02aea0d3d4d9bb19644ed: contains zero-padded file modes
bb4729593e76f66b46292ad6ae61bfe909558337: contains zero-padded file modes
4709aa73691ce7da36dd22ccfd157c4514395330: contains zero-padded file modes
Run Code Online (Sandbox Code Playgroud)

我尝试了以下(由同事建议)来查找违规提交,以便我可以纠正它们.我尝试了以下方法.

  1. 完成所有提交git rev-list HEAD.
  2. 对于每个提交,执行a git ls-tree -rd以查找所有相关对象SHA.
  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
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*sad 17

从注释添加变通方法作为答案:

使用重建repo git fast-export然后git fast-import解决问题,但SHA值将更改并且不会引用树引用.

创建一个新的空存储库:

mkdir /newrepo
cd /newrepo
git init
Run Code Online (Sandbox Code Playgroud)

使用fsck警告返回旧版本:

cd /oldrepo
Run Code Online (Sandbox Code Playgroud)

使用旧数据的快速导出来管理数据,以便在新的repo中快速导入

git fast-export --all | (cd /newrepo && git fast-import)
Run Code Online (Sandbox Code Playgroud)


New*_*one 5

只是对@9000的答案的补充:

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

git fast-export --signed-tags=strip --all | (cd ../newrepo/ && git fast-import)
Run Code Online (Sandbox Code Playgroud)