いくつかのリポジトリでコマンドを実行しましたが、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は新しいリポジトリに書き込むときに重複した値を取得しません。