Subversion 1.5 でサポートされる merge tracking で mergeinfo サブコマンドが 追加されました。 mergeinfo サブコマンドに関して説明します。
処理の流れ
| コマンド | 説明 |
|---|---|
| svn mergeinfo merge-source-URL | merge-source-URL からカレントディレクトリにある作業コピーの URL に 対して既にマージされたリビジョンを表示するためのコマンドです。 作業コピーが trunk のもので、merge-source-URL がブランチの URL の場合 ブランチに行った修正のうち、まだ trunk にマージされていないリビジョンが 表示されます。 |
| svn mergeinfo --show-revs merged merge-source-URL | svn mergeinfo merge-source-URL と同じ。 |
| svn mergeinfo --show-revs eligible merge-source-URL | merge-source-URL からカレントディレクトリにある作業コピーの URL に 対してまだマージされていないリビジョンを表示するためのコマンドです。 |
| svn merge --reintegrate branch-URL | branch-URL からカレントディレクトリにある作業コピーに まだマージされていない修正をすべてマージするためのコマンドです。 機能ブランチをすべて trunk にマージする場合などに使います。 |
D:\svntest>svnadmin create repos D:\svntest>svn co file:///D:/svntest/repos work リビジョン 0 をチェックアウトしました。 D:\svntest> D:\svntest>cd work D:\svntest\work>svn mkdir tags branches trunk A tags A branches A trunk D:\svntest\work>svn ci -m "add initial dir" 追加しています branches 追加しています tags 追加しています trunk リビジョン 1 をコミットしました。
D:\svntest\work>cd D:\svntest D:\svntest>svn co file:///D:/svntest/repos/trunk リビジョン 1 をチェックアウトしました。 D:\svntest>cd trunk D:\svntest\trunk>echo 1 > test.txt D:\svntest\trunk>svn add test.txt A test.txt D:\svntest\trunk>svn ci -m "add test.txt" 追加しています test.txt ファイルのデータを送信しています . リビジョン 2 をコミットしました。 D:\svntest\trunk>echo 2 >> test.txt D:\svntest\trunk>svn ci -m "update test.txt" 送信しています test.txt ファイルのデータを送信しています . リビジョン 3 をコミットしました。
D:\svntest\trunk>svn cp file:///D:/svntest/repos/trunk file:///D:/svntest/repos/branches/feature1 -m "create branch" リビジョン 4 をコミットしました。
D:\svntest\trunk>echo 3 >> test.txt D:\svntest\trunk>svn ci -m "update test.txt" 送信しています test.txt ファイルのデータを送信しています . リビジョン 5 をコミットしました。 D:\svntest\trunk> D:\svntest\trunk>echo 4 >> test.txt D:\svntest\trunk>svn ci -m "update test.txt" 送信しています test.txt ファイルのデータを送信しています . リビジョン 6 をコミットしました。
D:\svntest\trunk>cd D:\svntest D:\svntest>svn co file:///D:/svntest/repos/branches/feature1 A feature1\test.txt リビジョン 6 をチェックアウトしました。 D:\svntest>cd feature1 D:\svntest\feature1>echo A > test2.txt D:\svntest\feature1>svn add test2.txt A test2.txt D:\svntest\feature1>svn ci -m "add test2.txt" 追加しています test2.txt ファイルのデータを送信しています . リビジョン 7 をコミットしました。 D:\svntest\feature1>echo B >> test2.txt D:\svntest\feature1>svn ci -m "update test2.txt" 送信しています test2.txt ファイルのデータを送信しています . リビジョン 8 をコミットしました。
D:\svntest\feature1>svn mergeinfo file:///D:/svntest/repos/trunk
← マージ済みの修正はなし
D:\svntest\feature1>svn mergeinfo --show-revs merged file:///D:/svntest/repos/trunk
← マージ済みの修正はなし
D:\svntest\feature1>svn mergeinfo --show-revs eligible file:///D:/svntest/repos/trunk
r5 ← 未マージ修正はこの2つ
r6
D:\svntest\feature1>svn merge file:///D:/svntest/repos/trunk
--- r4 から r8 までを '.' にマージしています:
U test.txt
D:\svntest\feature1>svn di
属性に変更があったパス: .
___________________________________________________________________
追加: svn:mergeinfo
/trunk:r4-8 をマージしました
Index: test.txt
===================================================================
--- test.txt (リビジョン 6)
+++ test.txt (作業コピー)
@@ -1,2 +1,4 @@
1
2
+3
+4
D:\svntest\feature1>svn up
リビジョン 8 です。
D:\svntest\feature1>svn ci -m "merge from trunk"
送信しています .
送信しています test.txt
ファイルのデータを送信しています .
リビジョン 9 をコミットしました。
D:\svntest\feature1>svn ci -m "merge from trunk"
送信しています .
送信しています test.txt
ファイルのデータを送信しています .
リビジョン 9 をコミットしました。
D:\svntest\feature1>svn di
D:\svntest\feature1>svn merge file:///D:/svntest/repos/trunk
D:\svntest\feature1>svn st
M .
D:\svntest\feature1>svn di
属性に変更があったパス: .
___________________________________________________________________
変更: svn:mergeinfo
/trunk:r9 をマージしました
D:\svntest\feature1>svn ci -m "merge from trunk"
送信しています .
リビジョン 10 をコミットしました。
D:\svntest\feature1>svn mergeinfo --show-revs merged file:///D:/svntest/repos/trunk
r5
r6
D:\svntest\feature1>svn mergeinfo --show-revs eligible file:///D:/svntest/repos/trunk
D:\svntest\trunk>cd D:\svntest\trunk D:\svntest\trunk>svn up リビジョン 9 です。 D:\svntest\trunk>svn mergeinfo --show-revs merged file:///D:/svntest/repos/branches/feature1 D:\svntest\trunk>svn mergeinfo --show-revs eligible file:///D:/svntest/repos/branches/feature1 r4 r7 r8 r9 D:\svntest\trunk>svn merge file:///D:/svntest/repos/branches/feature1 ← --reintegrate を指定しなかった --- r4 から r9 までを '.' にマージしています: A test2.txt U test.txt D:\svntest\trunk>svn di 属性に変更があったパス: . ___________________________________________________________________ 追加: svn:mergeinfo /branches/feature1:r4-9 をマージしました /trunk:r2-3 をマージしました ← 余計な情報が含まれる D:\svntest\trunk>svn revert -R . '.' を元に戻しました 'test2.txt' を元に戻しました D:\svntest\trunk>del test2.txt D:\svntest\trunk>svn merge --reintegrate file:///D:/svntest/repos/branches/feature1 --- リポジトリ URL 間の差分を '.' にマージしています: A test2.txt U test.txt U . D:\svntest\trunk>svn di 属性に変更があったパス: . ___________________________________________________________________ 追加: svn:mergeinfo /branches/feature1:r4-9 をマージしました D:\svntest\trunk>svn st M . A + test2.txt D:\svntest\trunk>svn ci -m "merge from feature branch" 送信しています . 追加しています test2.txt リビジョン 10 をコミットしました。 D:\svntest\trunk>svn mergeinfo --show-revs merged file:///D:/svntest/repos/branches/feature1 r4 r7 r8 r9 D:\svntest\trunk>svn mergeinfo --show-revs eligible file:///D:/svntest/repos/branches/feature1