20

私の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. これらのコミットごとに、 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

ここで何が欠けていますか?問題のあるコミットまたはファイルに問題があることをどのように確認できますか? 最後に、リポジトリを修正したいと思います。

4

2 に答える 2

20

コメントからの回避策を回答として追加します。

を使用してリポジトリを再構築してから問題git fast-exportgit fast-import解決しますが、SHA値は変更され、ツリー参照は引き継がれません。

新しい空のリポジトリを作成します。

mkdir /newrepo
cd /newrepo
git init

fsckの警告が表示された古いものに戻ります。

cd /oldrepo

古いデータから新しいリポジトリへの高速インポートへの高速エクスポートを使用してデータをパイプします

git fast-export --all | (cd /newrepo && git fast-import)
于 2013-02-12T18:16:28.720 に答える
5

@ 9000の答えを補足するだけです:

で空の git リポジトリを作成し../newrepo

git fast-export --signed-tags=strip --all | (cd ../newrepo/ && git fast-import)
于 2016-10-12T04:45:34.917 に答える