svn merge(マージ)

イメージ図

        4  5  6
        o--o--o   <--- branches/1.0
       /       \
 o--o--o--------o <--- trunk
 1   2  3       7 

ブランチを作る

 $ svn copy file:///var/svn/trunk file:///var/svn/branches/1.0
 Committed revision 4.

ブランチをチェックアウトして、ファイルを編集・コミットする

 $ svn checkout file:///var/svn/branches/1.0 $HOME/branch
 $ cd $HOME/branch
 $ echo 1 > 1.txt
 $ svn commit -m ''
 送信しています              1.txt
 ファイルのデータを送信しています .
 Committed revision 5.
 
 $ touch 2.txt
 $ svn add 2.txt
 $ svn commit -m ''
 追加しています              2.txt
 ファイルのデータを送信しています .
 Committed revision 6.

ブランチをトランクにマージする

トランクをチェックアウトする

 $ svn checkout file:///var/svn/trunc $HOME/trunk

マージ内容の差分を確認する

 $ svn diff file:///var/svn/branches/1.0@4 file:///var/svn/branches/1.0@6
 Index: 2.txt
 ===================================================================
 Index: 1.txt
 ===================================================================
 --- 1.txt       (リビジョン 4)
 +++ 1.txt       (リビジョン 6)
 @@ -0,0 +1 @@
 +1

マージを実行する

 $ svn merge file:///var/svn/branches/1.0@4 file:///var/svn/branches/1.0@6
 --- r5 から r6 までを '.' にマージしています:
 A    2.txt
 U    1.txt
 --- Recording mergeinfo for merge of r5 through r6 into '.':
  U   .
  • マージ対象の指定の仕方は、他にも→ svn merge -r 4:HEAD file:///var/svn/branches/1.0
  • --dry-runオプションを付けると実行を確認できる。

マージをコミットする

 $ svn commit -m ''
 送信しています              .
 送信しています              1.txt
 追加しています              2.txt
 ファイルのデータを送信しています .
 Committed revision 7.

ブランチのログを参照する

 $ svn log --stop-on-copy file:///$HOME/tmp/svn/branches/1.0
 ------------------------------------------------------------------------
 r6 | taro | 2012-04-09 23:36:46 +0900 (月, 09  4月 2012) | 1 line
 ------------------------------------------------------------------------
 r5 | taro | 2012-04-09 23:36:34 +0900 (月, 09  4月 2012) | 1 line
 ------------------------------------------------------------------------
 r4 | taro | 2012-04-09 23:35:59 +0900 (月, 09  4月 2012) | 3 lines
 ------------------------------------------------------------------------

↑--stop-on-copyオプションでブランチを作って以降のログを参照できる。オプションを付けないと↓。

 $ svn log file:///$HOME/tmp/svn/branches/1.0
 ------------------------------------------------------------------------
 r6 | taro | 2012-04-09 23:36:46 +0900 (月, 09  4月 2012) | 1 line
 ------------------------------------------------------------------------
 r5 | taro | 2012-04-09 23:36:34 +0900 (月, 09  4月 2012) | 1 line
 ------------------------------------------------------------------------
 r4 | taro | 2012-04-09 23:35:59 +0900 (月, 09  4月 2012) | 3 lines
 ------------------------------------------------------------------------
 r2 | taro | 2012-04-09 23:34:41 +0900 (月, 09  4月 2012) | 1 line
 ------------------------------------------------------------------------
 r1 | taro | 2012-04-09 23:34:15 +0900 (月, 09  4月 2012) | 1 line
 ------------------------------------------------------------------------

トランクで行われたコミットをブランチに反映させるには?

 cd $HOME/branch2
 svn merge file:///var/svn/trunk

トランクを指定してマージする。

参考

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.merge.html


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2012-04-23 (月) 18:08:53