web-dev-qa-db-ja.com

Git svn rebase:チェックサムの不一致

リポジトリでgitsvn rebaseを実行しようとすると、問題が発生します。表示されます:

Checksum mismatch: code/app/meta_appli/app_info.py
expected: d9cefed5d1a630273aa3742f7f414c83
     got: 4eb5f3506698bdcb64347b5237ada19f

たくさん検索しましたが、この問題を解決する方法が見つかりませんでした。

誰かが知っているなら、あなたの知識を共有してください。前もって感謝します。

45
darkpotpot

この解決策 私のために働いた唯一のものでした:

ファイルの最後の変更のリビジョン番号は何でしたかを確認してください。

git svn log chrome/test/functional/search_engines.py

そのリビジョンの前にsvnを最も近い親にリセットします。

git svn reset -r62248 -p

git svn fetch

あなたの成功で踊りなさい。

62
Domenic

たまたま、「git svn dcommit」の途中でスペースが足りなくなり、その後、「チェックサムの不一致」という同じメッセージが表示されました。

.git/refs/remotes/git-svnを編集し、問題のあるコミットのIDを前のIDに置き換えました。次のリベースで問題が修正されます。

1
ollupac

ブランチを指定したがトランクを指定しなかったときに、このエラーが発生しました。ブランチの1つをトランクとして指定した場合、再試行してもエラーは発生しなくなりました。 (「トランク」、「ブランチ」、「トランク」の区別全体は、git svnで強制するのは一般的に少しばかげています。これは、svnでの技術的な意味がなく、単なる人間の慣習であるためです。 )

1
FooF

git gc その後 git svn rebase再び働いた。

0
unhammer

Domenicの回答に加えて(2019年もまだsvn-to-gitting…):

削除してから再作成したブランチ(1)の特定のケースでは、古いブランチへの参照を削除した後、ブランチ作成コミットにリセットを適用する必要があります。

> git svn fetch
…
r146970 = …
Checksum mismatch: bla.x # Uh oh, there we go!
> # Seems to have occurred while fetching r146971 (last passed rev + 1), so let's try it:
> svn log -v -r 146971 $svn
M /branches/y/bla.x
> # OK, bla.x is a good indicator that this is indeed our failing commit.
> # What was the preceding commit on it, according to SVN?
> svn log -v -r 146971 $svn/branches/y/bla.x | less
------------------------------------------------------------------------
r146971
  M /branches/y/bla.x
Modified bla.x
------------------------------------------------------------------------
r145665
  A /branches/y (from /branches/z:145664)
Rebasing y on z
------------------------------------------------------------------------
> # Exactly what we were looking for: a branch creation. Let us clean branch y
> # so that git-svn is forced to find its recreation commit:
> rm -R .git/refs/remotes/Origin/y .git/*/refs/remotes/Origin/y
> vi .git/info/refs .git/packed-refs # remove references to y
> git svn reset -r145665 -p
> git svn fetch

Git-svnはブランチの削除を認識または適用せず、ブランチzから再作成する必要はないと考えたため、古いツリーに146971を適用しようとしたと思います。ブランチyがないことを伝えると、(zからの)ブランチ作成を強制的に再生します。

(1)svnでブランチyのgit rebase zに相当するものを模倣します:svn mv y y.old && svn cp z y && svnはマージして、新しいyでy.oldのすべてのコミットを取得します

0