Subversionでブランチをまたいでマージする時に気をつけること

ふつうにSubversion によるバージョン管理に書いてありますが.理解するために.またTortoise SVNでの作業なども書いてみよう.まぁ,でもたぶん間違っている.自分も複数のコミッタでの業務でほとんど使ってないので.テスト用のレポジトリを作って,練習してから試すのがいいと思う.というか間違ってたら誰か指摘してくれるとうれしいな…

概要メモ

ちゃんと範囲を指定してマージしないと,同じ変更を2度行う可能性がある.これはsubversionが「ブランチが既に受け取った変更点を自動的に記憶し、その一覧を表示」することをしないから.とはいえ失敗してもrevertすればいいので問題ない.マニュアル中にはマージ対象先の作業コピーが変更されている場合とかが書かれているがコミットしてからやればよい気がする.運用の仕方によっては問題が起こるかもしれないが.

マージが行われるのは指定した作業コピーである.実際はマージ対象先のディレクトリに移って作業すれば良いと思う.そうすれば対象先の引数が省略でき行うべき作業が認識しやすい.

そしてマージをする前にその結果がどうなるかを調べるべき.svn mergeで--dry-runというオプション(あるいはsvn diffでも)を使いこれからしようとするマージと同じ引数を付け結果を調べる.

簡単な例として同じブランチの差分を現在のディレクトリの作業コピーにそれを適応するというのがマニュアルのこの例である.

$ svn merge -r 100:200 http://svn.example.com/repos/trunk

ようするに「http://svn.example.com/repos/trunkのリビジョン100と200を比較し,その差分を現在のフォルダの作業コピーにマージする」という意味.

Tortoise SVNでの作業

WindowsエクスプローラSVNコマンドを融合するTortoise SVNGUIに慣れている場合かなり便利だ.インストールも簡単だし,メンテナンスされているし,日本語でも表示できる.


対象の作業コピーフォルダ内でコンテクストメニューからマージを呼び出し


マージの設定をして


Diffで適用される内容を確認


「動作チェック」で--dry-runを行う

その後「マージ」ボタンで実際の作業を行う.という手順になる.

この作業はコマンドラインで下記のようにしたのと同等ということだ.

$ svn merge -r 58:59 file:///C:/svn/sesame/branch/cookiemonster

ちなみにTortoise SVNの日本語より,コマンドラインの日本語の--helpで表示される内容の方がわかりやすい気がする.