連絡先 トップに戻る 最初に戻る 前に戻る 次へ進む
$Date: 2017-05-06 22:21:48 +0900 (2017/05/06 (土)) $
$Revision: 1117 $

svn mergeinfo

概要

Subversion 1.5 でサポートされる merge tracking で mergeinfo サブコマンドが 追加されました。 mergeinfo サブコマンドに関して説明します。

必要な環境

説明

svn mergeinfo は svn:mergeinfo プロパティを解析して、指定したブランチ(または trunk) から マージされた修正とマージされていない修正を表示するためのコマンドです。

具体例

コマンドは こちら

処理の流れ

  1. リポジトリ作成、初期ディレクトリ構成作成
  2. trunk にいくつかコミット
  3. HEAD の trunk からブランチ作成
  4. trunk にいくつかコミット
  5. ブランチにいくつかコミット
  6. ブランチを trunk に同期
  7. ブランチを trunk にマージ

実行例で使うコマンドの説明
コマンド 説明
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 をコミットしました。

trunk にいくつかコミット

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 をコミットしました。

HEAD の trunk からブランチ作成

D:\svntest\trunk>svn cp file:///D:/svntest/repos/trunk file:///D:/svntest/repos/branches/feature1 -m "create branch"

リビジョン 4 をコミットしました。

trunk にいくつかコミット

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 をコミットしました。

ブランチを trunk に同期

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

ブランチを trunk にマージ

ブランチに行った修正を trunk に再マージするときには --reintegrate を 指定します。TortoiseSVN 上ではマージするときに「マージタイプ」に 「ブランチを再統合する」を選んだのと同じです。
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