135

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

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

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

svnマージhttp://svn.myurl.com/proj/trunk

ブランチをトランクにマージ

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

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

ただし、SubversionへのインターフェースとしてTortoiseSVN1.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を使用して、reintegrateメソッドを使用する場合と使用しない場合で、ブランチをトランクにマージするにはどうすればよいですか?
  3. 上記のオプションのどれをそれぞれに使用する必要がありますか、またその理由は何ですか?

編集

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

svnマージhttp://svn.myurl.com/proj/trunk

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

4

5 に答える 5

262

私は他の答えを適切にたどることができませんでした。ここにダミーガイドがあります...

これは、往復trunk -> branchまたはのいずれかの方法で行うことができますbranch -> trunk。私は常に最初にtrunk -> branch競合を修正してからマージしbranch -> trunkます。

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

  1. ブランチ/タグをチェックアウト
  2. ブランチのルートを右クリック | 亀SVN | マージ ...
  3. マージ タイプ:リビジョンの範囲をマージ | 「次へ」をクリック ここに画像の説明を入力
  4. リビジョン範囲のマージ:ブランチ/タグにコピーしたトランク ディレクトリの URL を選択します。マージするリビジョンを入力するか、フィールドを空のままにしてすべてのリビジョンをマージします | 「次へ」をクリック ここに画像の説明を入力
  5. マージ オプション:これらはデフォルトのままにしました | 「結合」をクリック ここに画像の説明を入力
  6. これにより、リビジョンがチェックアウトされたブランチ/タグにマージされます
  7. 次に、マージされた変更をブランチ/タグにコミットします
于 2013-03-27T12:31:24.833 に答える
28

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

  1. sourceURL1 [@N] sourceURL2[@M][WCPATH]をマージします
  2. sourceWCPATH1 @ N sourceWCPATH2@Mをマージ[WCPATH]
  3. マージ[-cM[、N ...] | -r N:M...]ソース[@REV][WCPATH]
  4. マージ--reintegrateSOURCE[@REV] [WCPATH]

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

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

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

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

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

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

于 2008-11-18T17:44:45.913 に答える
13

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

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

トランク内のブランチをマージするのとは逆の方法でも同じです。

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

于 2008-11-18T16:02:42.157 に答える
1

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

従来のサブバージョンでは変更をマージできますが、既にマージしたものは「記憶」されません。また、変更セットをマージから除外する便利な方法も提供しません。svnmerge.py は作業の一部を自動化し、簡素化します。また、svnmerge は、マージしたすべてのものからのログ メッセージを含むコミット メッセージを作成します。

于 2008-11-18T17:59:21.483 に答える
0

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

于 2016-11-02T18:03:41.300 に答える