0

競合が発生すると、デフォルトでのファイルが上書きtag_1されるようにマージできるかどうか疑問に思いました。また、に存在しないファイル/ディレクトリがある場合は、マージ後に存在します。tag_2tag_1tag_2tag_1tag_2

たとえば、実行する場合:

svn merge http://host/svn/tags/tag_1 http://host/svn/tags/tag_2

これにより、すべての変更が強制的に上書きされてコミットされ、チェックアウトするtag_2と、すべてtag_1の追加/変更されたファイルが作業コピーに含まれます。

現在、diffを実行svn rmしてから、同じ名前とパスの任意のファイルで実行しtag_2、次にsvn cp新しいファイルで実行する方法を使用していますが、リリースによって変更されたファイルの数が増えるにつれて、非常に非効率になります。

4

1 に答える 1

2
  1. ここでは不要な「最後の手段のツール」として「2-URLマージ」を使用します
  2. svn help mergeコマンドオプションについて注意深くお読みください
  3. tag2にマージする場合は、次のようになります。

    • tag_2を新しいWorkingCopyにチェックアウトするか、存在する場合はクリーンWCにします。ローカルでの変更や混合リビジョンはありません。
    • このWCsvn merge http://host/svn/tags/tag_1 --accept 'mine-conflict'でトリックを実行します(競合のない部分はマージされます。競合するチャンクの場合、「mine」(つまり、tag_2バージョン)が自動的に選択されます)
    • マージ結果をコミットする

編集:コメントへの返信でテスト実行

初期状態(トランクとブランチを使用)

svn log -q -v file:///Z:/Repo/
------------------------------------------------------------------------
r3 | Badger | 2013-01-17 10:07:55 +0600 (Чт, 17 янв 2013)
Changed paths:
   A /branches/MyFixes (from /trunk:2)
------------------------------------------------------------------------
r2 | Badger | 2013-01-17 10:03:32 +0600 (Чт, 17 янв 2013)
Changed paths:
   A /trunk/Data
   A /trunk/Data/b.txt
   A /trunk/Data/c.txt
   A /trunk/a.txt
------------------------------------------------------------------------
r1 | Badger | 2013-01-17 09:57:52 +0600 (Чт, 17 янв 2013)
Changed paths:
   A /branches
   A /tags
   A /trunk
------------------------------------------------------------------------

svn ls -R file:///Z:/Repo/trunk
Data/
Data/b.txt
Data/c.txt
a.txt

svn ls -R file:///Z:/Repo/branches/MyFixes
Data/
Data/b.txt
Data/c.txt
a.txt

ブランチの変更(ファイルの編集、新しいオブジェクトの追加)

svn log -q -v file:///Z:/Repo/ -l 1
------------------------------------------------------------------------
r4 | Badger | 2013-01-17 10:26:40 +0600 (Чт, 17 янв 2013)
Changed paths:
   M /branches/MyFixes/Data/b.txt
   M /branches/MyFixes/Data/c.txt
   A /branches/MyFixes/Data/d.txt
   A /branches/MyFixes/NewData
   A /branches/MyFixes/NewData/e.txt
   A /branches/MyFixes/NewData/f.txt
   M /branches/MyFixes/a.txt
------------------------------------------------------------------------

「M」ファイルの差分を制御する

svn diff file:///Z:/Repo/trunk/a.txt file:///Z:/Repo/branches/MyFixes/a.txt
Index: a.txt
===================================================================
--- a.txt       (.../trunk/a.txt)       (revision 4)
+++ a.txt       (.../branches/MyFixes/a.txt)    (revision 4)
@@ -1,2 +1,2 @@
-String 1
-String 2
+A String 1
+A String 2

svn diff file:///Z:/Repo/trunk/Data/b.txt file:///Z:/Repo/branches/MyFixes/Data/b.txt
Index: b.txt
===================================================================
--- b.txt       (.../trunk/Data/b.txt)  (revision 4)
+++ b.txt       (.../branches/MyFixes/Data/b.txt)       (revision 4)
@@ -1,2 +1,3 @@
-Data String 1
-Data String 2
+The Data String One
+The Data String Two
+The Data String Three

svn diff file:///Z:/Repo/trunk/Data/c.txt file:///Z:/Repo/branches/MyFixes/Data/c.txt
Index: c.txt
===================================================================
--- c.txt       (.../trunk/Data/c.txt)  (revision 4)
+++ c.txt       (.../branches/MyFixes/Data/c.txt)       (revision 4)
@@ -1,2 +1,3 @@
-String 1 data
-String 2 data
+1 Los datos de cadena
+Cadena 2 Datos
+Cadena 3 Datos

マージしてみてください

z:\Trunk>svn merge file:///Z:/Repo/branches/MyFixes --accept "mine-conflict" --dry-run
--- Merging r3 through r4 into '.':
A    NewData
A    NewData\e.txt
A    NewData\f.txt
U    Data\b.txt
U    Data\c.txt
A    Data\d.txt
U    a.txt

印象-競合なし(予想どおり)、ツリー競合なし(予想どおり)、分岐ファイルのマージ、ブランチからの新規-追加

実際のマージ

z:\Trunk>svn merge file:///Z:/Repo/branches/MyFixes --accept "mine-conflict"
--- Merging r3 through r4 into '.':
U    Data\b.txt
U    Data\c.txt
A    Data\d.txt
U    a.txt
A    NewData
A    NewData\e.txt
A    NewData\f.txt
--- Recording mergeinfo for merge of r3 through r4 into '.':
 U   .

マージをコミットする

svn log -q -v file:///Z:/Repo/ -l 1
------------------------------------------------------------------------
r5 | Badger | 2013-01-17 10:50:35 +0600 (Чт, 17 янв 2013)
Changed paths:
   M /trunk
   M /trunk/Data/b.txt
   M /trunk/Data/c.txt
   A /trunk/Data/d.txt (from /branches/MyFixes/Data/d.txt:4)
   A /trunk/NewData (from /branches/MyFixes/NewData:4)
   M /trunk/a.txt
------------------------------------------------------------------------

注意-問題!

ブランチ(a / b / c)でファイルを誤って編集した可能性がありますが、奇妙な理由--accept "mine-conflict"で無視され、マージ後のファイルはブランチの親と同じになります。

追加: OK、マージする前にトランクのa / b/cも編集するのを忘れました。Mea culpa、このポイントを追加した後、完全に期待どおりに機能する必要があります

于 2013-01-17T01:02:04.360 に答える