我在一些存储库上运行git fsck
命令,其中 4 个存储库出现了相同的错误:
error in tree b2b510c83ea553c587ebe5bc160e92cb7888393a: duplicateEntries: contains duplicate file entries
error in tree b3969ac6fe6b6359d48006e6a4cf3ffd5a4350a3: duplicateEntries: contains duplicate file entries
error in tree 5a7445940626358083a782ba5c81f956c7f82ac5: duplicateEntries: contains duplicate file entries
知道如何修复它吗?对所有人来说都完全相同意味着什么?
答案1
Git 将目录的内容存储在树对象中。一般来说,树对象应该按字节值按文件名顺序排序。
此消息意味着这些特定的树对象包含重复的条目,但事实并非如此。无论您使用什么工具来创建这些对象,都会创建损坏的对象,Git 现在正在抱怨。
要解决此问题,您应该首先停止使用造成这些问题的任何工具,以免使情况变得更糟。然后,您可以git gc --prune=now
立即运行删除未使用的对象。然后你可以运行git fsck
看看提交是否消失了;如果它们不在历史记录中,它们就会被删除。
如果这不起作用,那么您可以通过创建新存储库并运行类似以下内容来重写存储库:
git fast-export --all | (cd /empty/repository && git fast-import)
这必然会重写一些对象 ID,但 Git 在写入新存储库时不会导入重复的值。