web-dev-qa-db-ja.com

TortoiseSVNを使用して、トランクからブランチへ、またはその逆に変更をマージするにはどうすればよいですか?

優れた無料の Subversionでのバージョン管理 本を使用して、Subversion 1.5での分岐/マージについて読んでいます。 Subversionコマンドラインクライアントを使用して、最も頻繁に必要なアクションを実行する方法を理解していると思います。

トランクからの変更でブランチを更新

ブランチの作業ディレクトリから実行:

svn merge http://svn.myurl.com/proj/trunk

トランクへのブランチのマージ

トランクの作業ディレクトリから次を実行します。

svn merge --reintegrate http://svn.myurl.com/proj/branches/mybranch

ただし、SubversionへのインターフェイスとしてTortoiseSVN 1.5を使用しています。 TortoiseSVNでこれらの操作を実行する最良の方法を知りたいです。新しいダイアログには、メインメニューに3つの異なるオプションがあります。

  1. さまざまなリビジョンをマージする
  2. ブランチを再統合する
  3. 2つの異なるツリーをマージする

私が収集できるものから、TortoiseSVNは常に次の構文でsvnを実行します。

svn merge [--dry-run] --force From_URL @ revN To_URL @ revM PATH

さらに、ブランチの再統合は、一部のターゲットがマージされていないため続行できないことを示すメッセージで失敗することがよくあります。そのため、オプション#3を使用する必要がありました。

私の質問は:

  1. TortoiseSVN 1.5を使用して、変更をトランクからブランチにマージするにはどうすればよいですか?
  2. 再統合方法の有無にかかわらず、TortoiseSVN 1.5を使用してブランチをトランクにマージするにはどうすればよいですか?
  3. 上記のオプションのうち、それぞれに使用する必要があるのはなぜですか?

編集

「ドライラン」テストを通じて、コマンドラインSubversion操作が

svn merge http://svn.myurl.com/proj/trunk

リビジョン範囲を空白にしておく限り、TortoiseSVNのオプション#1(リビジョン範囲をマージ)に似ています。

130
Ryan Taylor

動作は、リポジトリのバージョンによって異なります。 Subversion 1.5では、4種類のマージが可能です。

  1. マージsourceURL1 [@N] sourceURL2 [@M] [WCPATH]
  2. マージsourceWCPATH1 @ N sourceWCPATH2 @ M [WCPATH]
  3. マージ[-c M [、N ...] | -r N:M ...] SOURCE [@REV] [WCPATH]
  4. merge --reintegrate SOURCE [@REV] [WCPATH]

Subversion 1.5より前では、最初の2つの形式のみが許可されていました。

技術的には、最初の2つの方法ですべてのマージを実行できますが、最後の2つはSubversion 1.5のマージ追跡を有効にします。

TortoiseSVNのオプションは、リポジトリが1.5以上の場合は範囲​​3またはリビジョンマップをメソッド3にマージし、リポジトリが古い場合はメソッド1にマージします。

機能をリリース/保守ブランチにマージするときは、「リビジョンの範囲をマージ」コマンドを使用する必要があります。

ブランチのすべての機能を親ブランチ(通常はトランク)にマージする場合にのみ、「ブランチの再統合」の使用を検討する必要があります。

そして、最後のコマンド-2つの異なるツリーをマージする-は、通常の分岐動作の外に出たい場合にのみ役立ちます。 (たとえば、異なるリリースを比較し、その差分をさらに別のブランチにマージします)

28
Bert Huijben

私は他の答えを適切にフォローできませんでした、ここにダミーのガイドがあります...

これは、trunk -> branchまたはbranch -> trunkのいずれかの方法で実行できます。私は常に最初にtrunk -> branchそこで競合を修正し、次にbranch -> trunkをマージします。

トランクをブランチ/タグにマージします

  1. ブランチ/タグをチェックアウト
  2. ブランチのルートを右クリック|カメSVN |マージ...
  3. マージタイプ:リビジョンの範囲をマージする| 「次へ」をクリックします enter image description here
  4. リビジョン範囲のマージ:ブランチ/タグにコピーしたトランクディレクトリのURLを選択します。マージするリビジョンを入力するか、フィールドを空のままにしてすべてのリビジョンをマージします| 「次へ」をクリックします enter image description here
  5. マージオプション:これらをデフォルトのままにしました| 「マージ」をクリックします enter image description here
  6. これにより、リビジョンがチェックアウトされたブランチ/タグにマージされます
  7. 次に、マージされた変更をブランチ/タグにコミットします
245
icc97

「リビジョンの範囲をマージ」を使用する必要があります。

トランクからブランチへの変更をマージするには、ブランチ作業コピー内で「リビジョン範囲のマージ」を選択し、マージするトランクURLと開始リビジョンと終了リビジョンを入力します。

トランクのブランチをマージする反対の方法で同じ。

--reintegrateフラグについては、次のマニュアルを確認してください。 http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html#tsvn-dug-merge-reintegrate

12
Davide Gualano

svnmerge.py を見てください。コマンドラインで、TortoiseSVNから呼び出すことはできませんが、より強力です。 FAQ から:

従来のSubversionでは変更をマージできますが、すでにマージした内容を「記憶」していません。また、変更セットをマージから除外する便利な方法も提供しません。 svnmerge.pyは作業の一部を自動化し、単純化します。 Svnmergeは、マージしたすべてのログメッセージを含むコミットメッセージも作成します。

1
Liudvikas Bukys

Shiftキーを押しながらフォルダーをクリックして、TortoiseSVN->すべてをマージを選択します

0
Denis