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