Subversion 1.5 以降での機能ブランチのマージ
Subversion バージョン 1.5 以降ではマージ追跡機能が使えるようになったのだが、これを利用したマージのしかたについて正しい情報が少ないので、ここに書いておく。
追記: Subversion バージョン 1.8 以降ではマージの内容が自動的に判定されるようになったので、以下に挙げている --reintegrate
オプションは不要となった。
ブランチ作成後に行ったトランクへの変更をブランチにマージする場合:
- マージ先ブランチの作業コピーに
cd
する svn update
svn merge "マージ元トランク URL"
またはsvn merge "マージ元トランク作業コピーパス@HEAD"
- 競合の解決・その他のチェック等を行った後、コミット
このマージは同じブランチに対して何度でも行える。マージを行うたびに、まだブランチに適用していないトランクでの変更がブランチに適用され、自動的に svn:mergeinfo 属性が更新される。
トランクをブランチにマージするときは、--reintegrate
オプションを付けてはいけない。
ブランチ作成後に行ったブランチへの変更をトランクにマージする場合:
- マージ先トランクの作業コピーに
cd
する svn update
svn merge --reintegrate "マージ元ブランチ URL"
- 競合の解決・その他のチェック等を行った後、コミット
ブランチをトランクにマージするときは、--reintegrate
オプションを付ける。
--reintegrate
オプションを使うこの形式のマージは一つのブランチにつき一回だけ行える (その後ブランチを更新してもそれをトランクにマージできないので、ブランチはただちに削除するとよい)。ブランチでの変更のうち、トランクからブランチへのマージによるもの以外の変更がトランクに適用され、自動的に svn:mergeinfo 属性が更新される。
マージを行う方向によって --reintegrate
オプションの指定の有無を正しく使い分ける必要がある。さもないと、トランクで行った変更をトランクに再び適用するというような誤った処理を行おうとして競合が発生する原因になる。
| 固定リンク
コメント