web-dev-qa-db-ja.com

すべてのコミット履歴を使用して、ブランチをSVNのトランクにマージする方法は?

すべてのコミット履歴を使用して、ブランチをSVNのトランクにマージする方法は?私はGitで使用できることを知っています

merge -squash

SVNに同等のコマンドはありますか?私はSVN1.6を使用しています。

27
zs2020

Subversion 1.5以降では、マージはローカルの作業コピーのsvn:mergeinfoプロパティに記録されます。したがって、この情報は失われません。

通常のsvn log -gの代わりにsvn logを使用すると、マージされたリビジョンを確認できます。

通常のマージは次のように実行されます

svn merge -rREV1:REV2 svn://server/branch my_trunk_wc 

ただし、ブランチを使用する場合は、再統合マージを使用する方が便利な場合があります。この場合、最初に次のようなものを使用して、すべてのトランクの変更をブランチにマージする必要があります

svn merge svn://server/trunk my_branch_wc

(これは、まだマージされていないすべてのものをマージします)

そして、この変更をブランチにコミットした後、使用できます

svn merge --reintegrate svn://server/branch my_trunk_wc

すべての変更を単一のコミットとして移動します。 (この操作の後、ブランチを削除する必要があります)

38
Bert Huijben

私はマージに少し錆びていますが、それでうまくいくべきではありませんか?

svn merge -rREV1:REV2 svn://server/branch my_trunk_wc

見る:

svn merge --help
5
DarkDust

ブランチのマージを作成し、ブランチ内のコミットごとに1つのコミットを作成するには、スクリプトを使用できます。私は以下を使用しています。

#/bin/bash

BRANCH="http://your branch url"

for i in {1127..1138} # list of revisions
do
  REV=$i
  echo $REV $BRANCH
  echo merged $REV from $BRANCH > tmps.commit
  svn log -c $REV $BRANCH >> tmps.commit
  svn up
  svn merge -c $REV $BRANCH ./
  svn commit -F tmps.commit
  rm tmps.commit
done

これにより、特定のブランチに指定した各リビジョンがチェックアウトされ、現在のディレクトリでコミットが実行されるため、対応するメッセージで各変更が保持されます。

5
Elmar Weber

各チェンジセットをdiffとして保存してから、トランクの上にコミットすることができます。これは一般に「移植」と呼ばれ、これを自動的に行うためのさまざまなツールがあります。

1
Borealid

あなたがしたいように聞こえます:

  1. おそらくいくつかのブランチからマージします。
  2. すべてのマージをそのように適切に記録します。
  3. 1つの新しいリビジョンとしてのみコミットします。

これは、基盤となるSVNアーキテクチャによってサポートされていると思います。しかし、それを提供するクライアントがあるかどうかはわかりません(ただし、svnmuccは複数のcpmvrmコマンドに対してそれを行います)。私が持っている以上の調査をしたい場合(それほど多くはかかりません)、またはSVNライブラリを駆動してそれを実行できる独自のクライアントを作成したい場合(難しいかもしれませんが、それでも実行可能)を除きます。次に、上記の2.と3.のいずれかを犠牲にする必要があると思います。

(3を犠牲にすると、直後にリポジトリをダンプし、ダンプファイルをハックして1つのリビジョンのみを使用できますが、わずかに単純なリビジョン履歴を持つだけでリスクを冒す価値はないと思います...)

0
Edmund