1. ホーム
  2. svn

[解決済み] TortoiseSVN を使って、トランクからブランチに、またはその逆に変更をマージするにはどうすればよいですか?

2022-06-24 02:52:08

質問

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 を使って、reintegrate メソッドを使ったり使わなかったりして、ブランチをトランクにマージするにはどうしたらよいでしょうか?
  3. 上記のオプションのうち、それぞれどれを使うべきでしょうか、またその理由は?

EDIT

ドライランのテストを通して、私はコマンドラインでの Subversion 操作を発見しました。

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

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

どのように解決するのですか?

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

  1. マージ sourceURL1[@N] sourceURL2[@M] [WCPATH].
  2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]を指定します。
  3. merge [-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に対応する範囲やリビジョンをマージします。

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

ブランチのすべての機能を親ブランチ(通常はトランク)にマージしたいときだけ、 'Reintegrate a branch' の使用を検討すべきです。

そして最後のコマンド -Merge two different trees- は、通常のブランチ動作から外れる場合にのみ有用です。(例: 異なるリリースを比較し、異なるものをさらに別のブランチにマージする)