web-dev-qa-db-ja.com

git-svnインデックスの不一致を解決するにはどうすればよいですか?

Git svn rebaseを実行すると、ある時点で停止し、次のように表示されました。

Index mismatch: SHA key of a tree != SHA key of another tree.(これらのSHAキーはツリーに対応し、上記の2つのshaキーのgit showからのコミットではないことがわかりました。)

re-reading <sha index of a commit in svn/trunk>
... list of files ...
fatal: bad object <SHA1 index of the bad object>
rev-list -1 <SHA1 index of the bad object> --not <SHA1 index of the revision it was trying to re-read>: command returned error: 128

私はgitの内部動作にあまり経験がないので、これらのような問題を分析し、おそらくそれらを解決するために従うべき一連のステップはありますか?

29
yasouser

このエラーは2回発生しましたが、どちらの場合も.gitフォルダー内のsvnフォルダーを削除することで解決しました。

rm -r .git/svn

次に、次のコマンドを使用してsvnメタデータを再構築します。

git svn fetch

次の行に沿ってメッセージが表示される可能性があります。

Migrating from a git-svn v1 layout...
Data from a previous version of git-svn exists, but
    .git/svn
    (required for this version (1.7.0.4) of git-svn) does not exist.
Done migrating from a git-svn v1 layout

そしてしばらくすると(特に大規模なリポジトリでは再構築に時間がかかる場合があります)、svnリポジトリのミラーが再び機能するようになるはずです。

32
Matthew Buckett

これを修正するために.git/svnフォルダーを削除しないでください。それはあなたがすべてを再構築することを要求します、それは迷惑です、それはしばらくかかります(私のレポのサイズのために数時間)そしてそれは必要ではありません。

私は正しい答えを見つけました ここ そして私はそれを以下に含めました。

リンクから:

.gitディレクトリ内で以下を実行します。

$ find . -exec grep -Hin 5b32d4ac2e03a566830f30a702523c68dbdf715b {} \;
Binary file ./svn/.caches/lookup_svn_merge.db matches
Binary file ./svn/.caches/check_cherry_pick.db matches

ここで、最初のコマンドの出力から一致する.svn /.cachesを削除します

$ rm ./svn/.caches/lookup_svn_merge.db
$ rm ./svn/.caches/check_cherry_pick.db

git svn rebaseまたはgit svn fetch心ゆくまで。

32
Matt Hulse

Gitクライアントを更新し、以下を使用して最後のsvnコミットを再フェッチします。

git svn reset -r 12345
git svn rebase

ここで、12345は既存のsvnリビジョンです。

13
yarolig

私の場合、この問題は、git-svnが使用するように構成されたauthorsファイルにない新しい/不明なsvn作成者が原因で発生しました。最初の数回の読み取りを無視したことが出力で報告されました。

Index mismatch: <leftsha1> != <rightsha1>
rereading <anothersha1>
        ... list of files ...
Author: <name> not defined in /path/to/authors file

そのため、不足している名前と、それを追加するファイル(組織のユーザーレジストリから電子メールを取得しました)がわかり、スムーズに航海できました。

4
ThorSummoner

この場合、問題はこれを体系的に実行する必要があることです。

  • git + svnを使用する
  • git-svnを使用してsvnにブランチを作成します
  • svnツールを使用してブランチをトランクにマージする
  • svnブランチを削除します
  • git-svnリベースを実行します

何かが足りない、すべてがクラッシュする。私が回復することを知っている唯一の方法は、.gitのすべてのsvnを削除し、すべてを再構築することです。それはただ迷惑で、しばらく時間がかかります!

1
geistteufel

おそらく、メッセージに同時にチェックサムの不一致がある可能性があります。

私はここで解決策を見つけました Git svn rebase:チェックサムの不一致

git svn log <item with checksum mismatch>
git svn reset -r<top history revision in the log> -p
git svn rebase
0
Sergei

このエラーが発生しました:

Index mismatch: <sha> != <sha> re-reading <sha index of a commit in svn/trunk> ... list of files ... <path> was not found in commit <sha> (r<svn rev>)

報告されたパスの履歴をSVNリポジトリで調べたところ、ファイルが追加されたSVNリビジョンが見つかりました。しかし、そのリビジョン用に作成されたコミットをGitで見ると、ファイルが含まれていないことがわかりました。

これは以前にディスクがいっぱいになったことが原因だったと思います。壊れたGitコミットのリビジョンにgit svn reset -rを戻した後、git svn fetchは再び正常に機能しました。

0
oliver

たぶん、ファイルシステムのコピーオンライト機能(ext4/btrfs/etc ...)と関係がありますか?

参照: https://stackoverflow.com/a/42299634/7491491

0
Raphaël Gertz

私は自分でこのエラーが発生しました。次のように、参照を削除するだけです。

rm .git/refs/remotes/git-svn

これでエラーが解消されるはずです。

0

最初のクローン作成中にこれに遭遇したのは、誰かがトランクと呼ばれるブランチを作成し、それが実際のトランクと競合していることが判明したためです。/branchs/trunkを無視した後、すべて機能しました

0