« Yash 2 その 176 | トップページ | テレビ番組等感想 その 279 »

2010年6月14日 (月)

Subversion 1.5 以降での機能ブランチのマージ

Subversion バージョン 1.5 以降ではマージ追跡機能が使えるようになったのだが、これを利用したマージのしかたについて正しい情報が少ないので、ここに書いておく。

追記: Subversion バージョン 1.8 以降ではマージの内容が自動的に判定されるようになったので、以下に挙げている --reintegrate オプションは不要となった。

ブランチ作成後に行ったトランクへの変更をブランチにマージする場合:

  1. マージ先ブランチの作業コピーに cd する
  2. svn update
  3. svn merge "マージ元トランク URL" または svn merge "マージ元トランク作業コピーパス@HEAD"
  4. 競合の解決・その他のチェック等を行った後、コミット

このマージは同じブランチに対して何度でも行える。マージを行うたびに、まだブランチに適用していないトランクでの変更がブランチに適用され、自動的に svn:mergeinfo 属性が更新される。

トランクをブランチにマージするときは、--reintegrate オプションを付けてはいけない。


ブランチ作成後に行ったブランチへの変更をトランクにマージする場合:

  1. マージ先トランクの作業コピーに cd する
  2. svn update
  3. svn merge --reintegrate "マージ元ブランチ URL"
  4. 競合の解決・その他のチェック等を行った後、コミット

ブランチをトランクにマージするときは、--reintegrate オプションを付ける。

--reintegrate オプションを使うこの形式のマージは一つのブランチにつき一回だけ行える (その後ブランチを更新してもそれをトランクにマージできないので、ブランチはただちに削除するとよい)。ブランチでの変更のうち、トランクからブランチへのマージによるもの以外の変更がトランクに適用され、自動的に svn:mergeinfo 属性が更新される。


マージを行う方向によって --reintegrate オプションの指定の有無を正しく使い分ける必要がある。さもないと、トランクで行った変更をトランクに再び適用するというような誤った処理を行おうとして競合が発生する原因になる。

|

« Yash 2 その 176 | トップページ | テレビ番組等感想 その 279 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Subversion 1.5 以降での機能ブランチのマージ:

« Yash 2 その 176 | トップページ | テレビ番組等感想 その 279 »