マージ

Subversion では「リリース版の保守用」と「次期リリース用開発版」のような1つのプロジェクトから派生したプロジェクトを独立して管理できます(通常 svn copy で branchesへコピーし派生プロジェクトを作る)。

とうぜん、片方のプロジェクトでの修正を他方のプロジェクトに取り込みたい事があります。そのような場合はマージ(svn merge) を使います。

 % cd ブランチのmoduleBデイレクトリー
 % svn merge -r 1011:1014 svn://server/ProjectA/trunk/moduleB

上の例ではtrunkのリビジョン1011〜1014で行われた変更がブランチの方へマージ(取り込まれ)されます。

ただし、ブランチの方でも変更している場合競合が発生するかもしれません。予め競合を知りたい場合は -dry-run オプションを付ける事で確認できます(実際のマージは行われない)

 % svn merge -dry-run -r 1011:1014 svn://server/ProjectA/trunk/moduleB

競合が起きた場合は、マージしようとしたファイル、マージ前のファイル、SVNがある程度マージしたファイルの3つのファイルが出来るので、それらを参照しながら人手で修正します。

修正が終っても、まだ競合状態のままなので、 resolved コマンドで競合マークを消してからコミットします。

 % svn resolved File1

 % svn ci File1