4

http://svnbook.red-bean.com/en/1.7/svn.branchmerge.commonpatterns.htmlで説明されているリリース ブランチ モデルに従おうとしていますが、マージしようとするとマージの競合が発生します。

# Normal SVN Structure
svn-testing2> ls -l
total 12K
drwxrwxr-x 3 xxx yyy 4.0K Jan 13 17:28 branches/
drwxrwxr-x 3 xxx yyy 4.0K Jan 13 17:28 tags/
drwxrwxr-x 3 xxx yyy 4.0K Jan 13 17:28 trunk/

# Create & commit some  data
svn-testing2> echo "line1" > trunk/file1; svn add trunk/file1; svn commit -m "created file1 " trunk/file1
Adding         trunk/file1
Transmitting file data .
Committed revision 2.

# Create the release branch
svn-testing2> svn copy trunk branches/release
A         branches/release
svn-testing2> svn commit -m "created release branch" branches/release
Adding         branches/release
Adding         branches/release/file1

Committed revision 3.

# Make & commit a change to trunk
svn-testing2> echo "line1-file2" > trunk/file2; svn add trunk/file2; svn commit -m "created file2" trunk/file2
A         trunk/file2
Adding         trunk/file2
Transmitting file data .
Committed revision 4.

# Attempt to merge the change to trunk:
svn-testing2> cd branches/release/
svn-testing2/branches/release> svn merge ^/trunk
--- Merging r2 through r4 into '.':
   C file1
A    file2
Summary of conflicts:
  Tree conflicts: 1
bumjvr@mbs-p:~/svn-testing/svn-testing2/branches/release> svn st
 M      .
      C file1
      >   local add, incoming add upon merge
A  +    file2

これを修正できます

svn-testing2> svn resolve --accept=working *

しかし、私がこれをしなければならないのは間違っているようです。

次に、リリース ブランチに「ホットフィックス」(たとえば、「release/file3」を作成) を適用した場合、それをトランクに移植するにはどうすればよいですか? 「リリース」を「トランク」にマージすると問題なくマージされますが、「トランク」を「リリース」にマージすると、local add, incoming add upon merge「file3」などで別の競合が発生します

これらは両方とも実行時間の長いブランチであるため、機能ブランチを「再統合」しようとしているわけではありません。

SVN レッドブック (これは一般的に優れています) がこの一般的な分岐パターンを説明していて、実際に実行するコマンドの実際の例がないのはイライラします!

これらの不適切なマージ競合をすべて回避して、この分岐パターンに従うには、正確に何を実行する必要がありますか? または、この分岐パターンの実際の例がどこにもありますか?見つかりません!

4

1 に答える 1

2

これは、copy操作がクライアント側で完全に行われるためです。この操作にはマージ追跡情報が含まれていないため、マージを試みると、file1それ自体の上に追加しようとします。この動作は、copyコマンドのヘルプの免責事項に記載されています。

> svn ヘルプ コピー

copy (cp): 作業コピーまたはリポジトリにファイルとディレクトリをコピーします。
使用法: copy SRC[@REV]... DST

  SRC と DST はそれぞれ、作業コピー (WC) パスまたは URL のいずれかになります。
    WC -> WC: 追加のコピーとスケジュール (履歴付き)
    WC -> URL: WC のコピーをすぐに URL にコミットします
    URL→WC:URLをWCにチェックアウト、追加予定
    URL -> URL: 完全なサーバー側のコピー; 分岐とタグ付けに使用
  すべての SRC は同じタイプでなければなりません。複数のソースをコピーする場合、
  これらは、ディレクトリである必要がある DST の子として追加されます。

  警告: 以前のバージョンの Subversion との互換性のために、
  2 つの作業コピー パス (WC -> WC) を使用して実行されるコピーは、
  リポジトリに連絡してください。そのため、デフォルトでは、
  コピーのソースからマージ追跡情報を伝播する
  目的地へ。

をサーバー側のコピーに変更するcopyと、マージは成功します。

# This is the difference, the copy happens on the server
> svn copy ^/trunk ^/branches/release2 -m "Creating release2"
Committed revision 5.

# Update our working copy to get the new release
> svn update branches
Updating 'branches':
A    branches\release2
A    branches\release2\file1
A    branches\release2\file2
Updated to revision 5.

> echo blah>trunk\file3; svn add trunk\file3; svn commit -m "created file3"
A         trunk\file3
Adding         trunk\file3
Transmitting file data .
Committed revision 6.

> cd branches\release2
> svn merge ^/trunk
--- Merging r5 through r6 into '.':
A    file3
--- Recording mergeinfo for merge of r5 through r6 into '.':
 U   .
于 2015-01-13T19:00:10.973 に答える