4

私はsvnが初めてで、トランクから作業中のブランチに多くのマージを行う必要があります。これは、マージするために使用するsvnコマンドのシーケンスです

svn up
svn mergeinfo --show-revs eligible branch trunk (branch and trunk are actually svn urls)

ブランチと最新のトランク リビジョンから適格なリビジョンの最も低いリビジョンを取得し、svn マージを実行します。

svn merge -r lowest_eligible:latest_trunk trunk_url .

マージ中にいくつかの競合があります。しかし、それらはブランチで行った変更とは関係がないため、なぜそれらが競合しているのか少し混乱しています。何か案は?とにかく、私はいつも選択するだけです、彼らはそれを解決するためにいっぱいです

最後に、コミットする前に svn resolve を実行する必要があります

svn resolve --accept working -R .

2 つの質問があります。これは、トランクからブランチへのマージを実行するコマンドの最適なシーケンスですか?

マージにはしばらく時間がかかる傾向があるため、マージをそのままにして、svn が競合を自動的に完全に解決できるようにしたいと思います。これを行う方法はありますか?

4

2 に答える 2

3
  1. トランクからブランチ (ブランチの WC 内) にマージする場合、mergeinfo のパラメーターの順序が正しくありません (逆): 短縮された正しい形式である必要がありますsvn mergeinfo --show-revs eligible trunk(最初のパラメーターはマージのソース、2 番目のパラメーターは TARGET /default "."/、つまり WC です)。 )
  2. すでに mergeinfo をサポートしている Subversion を使用している場合、「マージする必要がある」リビジョンの範囲の検出をスキップできます - Subversion はマージ時に自動的にそれを行います
  3. 競合が発生した場合に常にトランクからの変更を優先する場合は、それをマージ コマンドに追加できます。

最終的な結果として、定期的な同期マージ プロセスは、ブランチの WC 内の単一のコマンドになります。

svn merge <URL-OF-TRUNK> --accept "theirs-conflict"

于 2013-04-13T16:08:29.937 に答える
2

通常、マージははるかに簡単です。特に、トランクからブランチへのマージのみの場合はそうです。その場合は、次のことを確認してください。

A) ブランチの作業コピーにコミットされていない変更がないこと、および B) ブランチの現在のバージョンがあること ('svn up' を実行することによって既に行っていること)

マージする準備ができたら、実行するだけです

svn merge ^/trunk 

ブランチの作業コピーで。

競合について: svn がマージ diff を台無しにし、競合がない場合に競合を報告することがあります。kdiff3 などの優れた 3 方向マージ ツールは、驚異的な助けになります。それ以外は、自動競合解決を使用しないことをお勧めします。ほとんどの競合は、解決を回避するだけでは解決が容易にならないためです。上記のプロセスを使用すると、少なくともすべての不必要な競合を回避できるはずです。

于 2013-04-13T16:12:25.220 に答える