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


132

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

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

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

svnマージ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マージhttp://svn.myurl.com/proj/trunk

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


リンクが見つかりませんでした!= /
レオナルドコスタ

回答:


28

動作は、リポジトリのバージョンによって異なります。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]

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

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

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

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

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

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


誰かがstackoverflow.com/questions/51657636/…で私を助けてくれませんか。これは私たちのチームにとって重要な質問です。それに関するいくつかのアイデアが必要です。
アンクル

249

私は他の答えに正しく従うことができませんでした、ここにダミーガイドの詳細があります...

あなたは移動するための方法ラウンドのいずれかこれを行うことができますtrunk -> branchbranch -> trunk。私は常に最初にtrunk -> branchそこで競合を修正してからマージしbranch -> trunkます。

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

  1. ブランチ/タグをチェックアウトする
  2. ブランチのルートを右クリック| Tortoise SVN | マージ...
  3. マージタイプ:リビジョンの範囲をマージします| 「次へ」をクリックします ここに画像の説明を入力してください
  4. リビジョン範囲のマージ:ブランチ/タグにコピーしたトランクディレクトリのURLを選択します。マージするリビジョンを入力するか、フィールドを空のままにしてすべてのリビジョンをマージします| 「次へ」をクリックします ここに画像の説明を入力してください
  5. マージオプション:これらをデフォルトのままにしました| 「マージ」をクリックします ここに画像の説明を入力してください
  6. これはリビジョンをチェックアウトされたブランチ/タグにマージします
  7. 次に、マージされた変更をブランチ/タグにコミットします

4
「マージするリビジョン範囲」を省略して「テストマージ」を行いました。それは私が必要としたものでした:範囲は私に自動的に設定されました(ブランチが行われてからブランチの最後のリビジョンまで)
Lian

すばらしい答え-簡潔でわかりやすい。それは私にとってはうまくいきましたが、私が単一の構成ファイルをマージしたいだけのとき、何らかの理由でそれを2回しなければなりませんでした。今ではすべて良好です。乾杯
ウィンガー2014年

@リアン私はトランクからブランチにマージするために同じことをしました。トランクの最新バージョンのファイルをブランチファイルとマージする場合は、リビジョン範囲を空白のままにします。
ウィンガー2014年

2
トータスSVNの現在のバージョンは、現在すべてのリビジョンをマージする代わりに、ステップ4でリビジョン範囲を空白のままにするオプションがある
未知のDev

1
@Onkarいくつかの衝突はほとんど常に起こります。trunkとなどの2つのブランチbranchがある場合、変更をできるだけ早くからtrunkにマージするbranchようにすると、競合ができるだけ回避されます。これは、マージbranchするときにtrunk競合が発生しないことを意味します。
icc97

12

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

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

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

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


1

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

従来のsubversionでは変更をマージできますが、すでにマージしたものは「記憶」されません。また、変更セットをマージから除外する便利な方法も提供していません。svnmerge.pyはいくつかの作業を自動化し、それを簡素化します。Svnmergeはまた、マージしたすべてのものからのログメッセージでコミットメッセージを作成します。


6
svnmerge.pyはSubversion 1.4以前で開発されました。Subversion 1.5では、コア製品にマージ追跡が導入されました。
Bert Huijben、2008年

0

Shiftキーを押しながらフォルダーを右クリックし、TortoiseSVN-> Merge Allを選択します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.