3

svn book ( http://svnbook.red-bean.com/en/1.7/svn.branchmerge.commonpatterns.html ) の Common Branching Patterns のセクションでは、次のように述べています。

トランクは「リリース」ブランチにコピーされます。チームがソフトウェアのリリース (たとえば、1.0 リリース) の準備が整ったと判断した場合、/trunk は /branches/1.0 にコピーされる可能性があります。

チームは並行して作業を続けます。あるチームはリリース ブランチの厳密なテストを開始し、別のチームは /trunk で新しい作業 (バージョン 2.0 など) を続けています。いずれかの場所でバグが発見された場合 、必要に応じて修正が移植されます。ただし、ある時点で、そのプロセスも停止します。ブランチは、リリース直前の最終テストのために「凍結」されています。

(強調鉱山)。メンテナンスブランチはリリースブランチと同じだと思います..? (次のバージョンを開発している間、1 人の顧客を以前のバージョンのままにしておく必要があります)。

を使用すべきではないことは--reintegrate確かですが、将来のマージを台無しにしないような方法でマージを行う方法がよくわかりません。リビジョン範囲を手動で追跡する必要がありますか? ..またはSubversionがそれを行います(バージョン1.7.6を使用しています)。

[編集: 詳細]

trunk> svn mkdir c
trunk> touch a.txt b.txt c\d.txt
trunk> svn add a.txt b.txt c\d.txt
trunk> svn ci -m "initial trunk"
...
Committed revision 9580.

trunk> svn copy .../trunk .../branches/branch1 -m "create maint branch"
Comitted revision 9581.

trunk> svn rm c\d.txt
trunk> svn ci -m "Fix bug-1."
Deleting       c\d.txt

Committed revision 9582.

branch1> svn merge .../trunk
--- Merging r9581 through r9582 into '.':
D    c\d.txt
--- Recording mergeinfo for merge of r9581 through r9582 into '.':
 U   .

branch1> svn ci -m "Merged fix for bug-1 from trunk."
Deleting       c\d.txt
Committed revision 9583.

branch1> svn propget svn:mergeinfo .
/svntests/trunk:9581-9582

trunk> svn up
Updating '.':
At revision 9583.

【オリジナル問題】

trunk> svn merge .../branches/branch1
--- Merging r9581 through r9583 into '.':
   C c\d.txt
--- Recording mergeinfo for merge of r9581 through r9583 into '.':
 U   .
Summary of conflicts:
  Tree conflicts: 1

[@JB Nizet からの修正]

trunk> svn merge -c 9583 --record-only .../branch1
--- Recording mergeinfo for merge of r9583 into '.':
 U   .

trunk> svn propget svn:mergeinfo .
/svntests/branches/branch1:9583

その後、メンテナンス ブランチからの将来のマージは、競合を発生させることなく機能します (トランクの mergeinfo を正しく更新します)。

trunk> svn merge .../branch1
4

1 に答える 1

3

リリース ブランチは、リリースの最終ステップを準備するために使用されます。メンテナンス ブランチは、リリース後にバグを修正するために使用されます。どちらもブランチであり、純粋にセマンティックの違いですが、それでも違いはあります。

バグ修正をマージするには、作業コピーがトランク (宛先ブランチ) を指していることを確認してから、メンテナンス ブランチ (またはすべてをマージしたくない場合はメンテナンス ブランチのリビジョン範囲) からマージします。

svn merge url_of_the_maintenance_branch

次回のマージでは、これらのリビジョンがすでにトランクにマージされていることが記憶され、自動的にスキップされます。

于 2012-09-23T08:55:57.120 に答える