目標:
SVNリポジトリをgitでチェックアウトして、trunk/branchそれぞれで作業したい。
あわよくば、git-new-workdirで別個の作業ディレクトリを確保したい。
おそらく、だけど、これをやるとbranchをまたがった git cherry-pick が非常にやりやすそう。
で、gglってもこんな記事しか出てこない。直接ひょっとするとあんまりお勧めできないうんようなのだろうか?? まあでも以下のように作業したら、なんとなく出来た様なので、とりあえずめでたい記念にメモ。
0.前提
svnのリポジトリは、http://somewhere/svn-repositoriesこのリポジトリには{trunk,branches,tags}と標準レイアウトである。またsvnのリポジトリにはすでにbranchがある事を前提とする(無ければ自分で作ってね ;)。
somewhere/working_dirをメインの作業ディレクトリとする。gitでいうところのmaster, svnでいうところのtrunk。
作業結果の確認にはsvnリポジトリを直接ブラウズ出来る様な仕組み(今回はUSVN)で確認しました。
1.標準レイアウト{trunk,branches,tags}のSVNリポジトリをgit svnでチェックアウト
参考: http://transitive.info/article/git/command/svn/
$ cd somewhere/working_dir
$ git svn clone -s http://somewhere/svn-repositories
( -sが標準レイアウトをそのままgitに適用してくれる )
2. svnのbranchで作業できるかを確認
参考: http://sessan.hatenablog.com/entry/2012/11/04/132746
branchの確認
$ git branch -a
* master
remotes/origin/master
remotes/origin/other_branch
svnのbranchを git のbranch 'my_branch'としてチェックアウト
$ git co -b my_branch remotes/other_branch
:
do something
:
$ git commit -a -m "done something"
$ git svn dcommit
するとsvnのother_branchのみ"do somethingな"変更を確認できた。
3. git-new-workdirでbranchのコピーを別ディレクトリにつくる
2の手順でローカルにremotes/other_dirのbranch,"my_branch"ができたので、これを利用する事が出来そうだ。my_branch用のディレクトリをother_dirとしようか。
$ git-new-workdir . ../other_dir my_branch
$ cd ../other_dir
:
do something
:
$ git commit -a -m "done something part2"
$ git svn dcommit
するとsvnのother_branchのみ"do somethingな"変更を確認できた!
元のディレクトリに戻って、master (trunk) で作業してみる
$cd ../working_dir
$ git co master
:
do something on master
:
$ git commit -a -m "done something on working_dir"
$ git svn dcommit
するとsvnのtrunkのみ"do something on working_dir"な変更を確認できた!
これでなんとか楽に運用できそう!!