svn merge — 二つのソースの差を作業コピーパスに反映します。
svn merge [-c M | -r N:M] SOURCE[@REV] [WCPATH]
svn merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
svn merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]
最初の形式と二番目の形式ではソースとなるパス (最初の形式ではURL、二番目の形式では作業コピーパス) はリビジョン N
と M
で指定され、この二つを比較します。リビジョンを省略すると HEAD
をデフォルトとします。
「-c M」 オプションは、N = M-1
の状態の 「-r N:M」 と等価です。「-c -M」 は逆 (N = M-1
の状態の 「-r M:N」) になります。
三番目の形式では SOURCE
は URL か作業コピーの項目で、その場合、対応した URL を利用します。この URL のリビジョン N
と M
が、比較対象となります。
WCPATH
が変更を受け取る作業コピーパスです。もし WCPATH
を省略すると、デフォルトとして 「.
」 を使用します。ただし、両方のソースのベース名が同じで、さらに、その名前のファイルが 「.
」 にある場合は別で、この場合は、差分はそのファイルに適用されます。
svn diff とは違い、merge コマンドはマージ操作の実行時にファイルの系統を考慮します。これはあるブランチでの変更点を別のブランチにマージする場合に、あるブランチでは名称を変更したが、もう一方ではそうしなかったような場合に非常に重要になります。
--revision (-r) REV --change (-c) REV --non-recursive (-N) --quiet (-q) --force --dry-run --diff3-cmd CMD --extensions (-x) ARG --ignore-ancestry --username USER --password PASS --no-auth-cache --non-interactive --config-dir DIR
ブランチをトランクにマージします (トランクの作業コピーがあり、ブランチがリビジョン 250 で作られているものとします)。
$ svn merge -r 250:HEAD http://svn.red-bean.com/repos/branches/my-branch U myproj/tiny.txt U myproj/thhgttg.txt U myproj/win.txt U myproj/flo.txt
リビジョン 23 で分岐 (ブランチ化) して、トランクの変更をブランチにマージしたいとします。これにはブランチの作業コピー内で以下のような操作をします。
$ svn merge -r 23:30 file:///tmp/repos/trunk/vendors U myproj/thhgttg.txt …
一つのファイルの変更をマージするには以下のようにします。
$ cd myproj $ svn merge -r 30:31 thhgttg.txt U thhgttg.txt