我相信,我的Git存储库状况不佳,其中我做了
git fsck
我在顶部收到以下警告。
103b5dd53f7a96f8e3a02aea0d3d4d9bb19644ed: contains zero-padded file modes
bb4729593e76f66b46292ad6ae61bfe909558337: contains zero-padded file modes
4709aa73691ce7da36dd22ccfd157c4514395330: contains zero-padded file modes
我尝试了以下(由同事建议)来查找违规提交,以便我可以纠正它们。我尝试了以下方法。
git rev-list HEAD
。git ls-tree -rd
查找所有相关对象SHAs。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
我们在这里缺少什么?我们怎样才能发现违规提交或文件出现问题?最后,我想修复存储库。
答案 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)