Subversionのブランチ操作をgit並に簡単にする

svnとgit両方使うようになりました。するとgitの便利さに感嘆する一方、svnのブランチ操作の面倒臭さが際立ってきました。特に、ブランチ操作ではgitは素晴らしく例えば以下のような例をご覧いただくとその差は一目瞭然かと思います。

ブランチ一覧を得る

git branch
svn list http://example.com/svn/branches

ブランチを作る

git branch mybranch
svn cp http://example.com/svn/trunk http://example.com/svn/branches/mybranch -m 'create mybranch from trunk'

以上のように、svnはブランチをブランチとして扱っていないためとても面倒なコマンドを打たなくてはなりません。これではとてもsvnのブランチなんて使ってられないのでとっととgitに移動したいところです。しかしながら、諸処の都合によりまだ、しばらくは両方使い続けなくてはならないため、svnのブランチ操作を簡単にする、svnbrというRubyスクリプトを書きました。

ソース: http://github.com/tumf/svn-utils/blob/master/svnbr

このスクリプトが利用出来るのは、/branches以下にブランチを作って/tags以下にタグを作る人向けです。殆どの人がこの構成を使っているはずですが、svnはこれ以外のパスにも自由にブランチやタグを作れますので(というより、タグとブランチの区別がない)ご注意ください。

使い方をざっと説明します。svnbrはすべてワーキングディレクトリの上で実行します。まず、何もつけずに実行するとブランチの一覧を表示します。

$ svnbr
mybranch-1.2
mybranch-2.x
*trunk

頭に*がついているブランチが現在のワーキングディレクトリのブランチです。svnbrでは、例外的に/trunkもブランチと同じ扱いをします。

次に、他のブランチにswitchしてみます。

$ svnbr sw mybranch-1.2

これは以下のコマンドを実行するのと同義です。

svn sw http://example.com/svn/branches/mybranch-1.2

もしsw先のブランチがなかったときはsvnのswと異なった挙動をします。

$ svnbr sw mybranch-1.3

これは以下のsvnコマンドと同義です。

svn cp http://example.com/svn/branches/mybranch-1.2 http://example.com/svn/branches/mybranch-1.3 ¥
-m 'make mybranch-1.3 branch from mybranch-1.2'
svn sw  http://example.com/svn/branches/mybranch-1.3

上記のように、現在のワーキングディレクトリのブランチをコピーしてsw先のブランチ作成し、swします。

以下のようにして、タグからブランチを作ることもできます。

$ svnbr sw mybranch-1.2 --from-tag=VERSION-1.2.3

mybranch-1.2をtrunkへマージするときも、svnコマンドと同様にできます。

$ svnbr sw trunk
$ svnbr merge mybranch-1.2 -c 4,5

いらなくなったブランチを消すには

$ svnbr rm mybranch-1.2

他にも、logを見る時には以下のようにします。

$ svnbr log mybranch-1.2

これは、以下のように–stop-on-copyをつけて実行します。

svn --stop-on-copy http://example.com/svn/branches/mybranch-1.2

ブランチのリネーム

$ svnbr mv mybranch-1.2 mybranch-1.3

これは、以下のように実行します。

svn mv http://example.com/svn/branches/mybranch-1.2 http://example.com/svn/branches/mybranch-1.3 ¥
-m 'move branch mybranch-1.2 to mybranch-1.3'

以上のように、ざっくり作ったスクリプトなんで不具合等ありましたら申し訳ありません。
githubにおいてあるので、是非forkして改良してくださいね。

コメント / トラックバックはありません

コメントする