LoginSignup
8
7

More than 5 years have passed since last update.

git-svn使用中にSVNサーバ移行によりChecksum mismatch発生

Last updated at Posted at 2014-05-23

タイトル通りですが、git-svnでコードの管理をしている最中に、SVNサーバの移行が行われ、git-svn rebaseでChecksum mismatchが発生しました。SVNを使用しない!とすれば解決出来たかも知れませんが、まだSVNにコミットが発生する可能性があったため、git-svnが正常動作するようにしました。

状況

管理スタイル

SVNで管理している既存製品があり、自分一人で改修することになった。周りの了承を得てから、Gitへ移行しつつ、SVN側も少しは変更が入る可能性があったため一人でgit-svnを使用していた。

SVNサーバ移行

WindowsXPで動いていたSVNサーバを、サポート切れ&動作が重いので仮想マシンのCentOSへ移行。この際、旧WinXPと同じIPをCentOSに割り当てた。

問題現象

git-svn時に必ずchecksumが不一致となり、うまく行かない。

shell
$ git svn rebase
Checksum mismath: hoge/trunk/hoge.cs xxxxxxxxxxx
expected: aaaaaaaaaaa
     got: bbbbbbbbbbb

stackOverflowでこんなの見つけたけど、多分根本的な原因が違う。サーバが変わって元のSVNリポジトリのチェックサムと合わなくなったと思われる(予想)。

最終目標

git-svnが使用出来て、gitのログ、変更内容が正常に入っているgitリポジトリを作る。

解決方法

移行後のSVNからはgit svn cloneでローカルリポジトリを作成出来るから、旧SVNサーバのgit-svnリポジトリ(旧リポジトリ)から新サーバのgit-svnリポジトリ(新リポジトリ)に変更を反映させ、以降は新リポジトリを使用する様にする。

前提

  • svnのトランクとmasterが一致
  • 作業内容はmasterから分かれたAブランチにコミットされ、masterには未マージ

手順

  1. 新SVNサーバからgit-svnリポジトリを作成する。
  2. 旧リポジトリのリモートとして、新リポジトリを追加する


    $ ls
    oldrepository newrepository
    $ cd oldrepository
    $ git remote add svn ../newrepogitory
    $ git fetch svn

  3. 新リポジトリと旧リポジトリを合わせる。
    この時点では新リポジトリと旧リポジトリでは、コミットが内容は同じでもコミットIDがちがうので別物として扱われるので、旧リポジトリのmasterを新リポジトリのmasterに変える。
    git rebase svn/master

  4. 旧リポジトリの変更が入ったブランチAをmasterからの派生に変える

    $ git checkout A
    $ git rebase master

  5. 新リポジトリに旧リポジトリの変更(ブランチA)を送る
    git push svn A

以上でgit-svnが正常に動作し、変更点も入った新リポジトリができました。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7