GitとSVNのリポジトリをつなぐ方法

satoyamaが2014/09/12 19:09:11に投稿

GitのコミットとSVNのリポジトリをつなぐ方法

ローカルはGitリポジトリ、リモートがSVNで開発をしてきて、リモートのコミット先が新規に作られたブランチに変わった場合など、
SVNリポジトリとローカルヒストリーに接点がある場合、SVNリポジトリとGitリポジトリがあるリビジョンで繋がる場合に有用な方法。

イメージは

Git:    -->A-->B
SVN:  -->A

という構造。

$ git checkout -b svn <Git Aのハッシュ値> # SVNにコミット(リリース)用ブランチ
$ git svn init <SVNリポジトリ>
$ git svn fetch
$ git branch -a   # remotes/git-svnが存在していることを確認
$ git log git-svn --prety=oneline # SVN Aのリビジョンのハッシュ値を確認
$ echo "Git Aのハッシュ値 SVN Aのハッシュ値" > .git/info/grafts
$ git merge --squash B  
$ git commit -a "Bの変更を取り込み"
$ git svn dcommit
Git(svn): -->A-->B
SVN:      -->A-->B

となるはず

※SVNリポジトリが生成したばかりのリポジトリだとエラーになるとの情報もある。
また、SVNがA->Cという別のリビジョンがある場合は未検証