すべてのコミット履歴を使用して、ブランチをSVNのトランクにマージする方法は?私はGitで使用できることを知っています
merge -squash
SVNに同等のコマンドはありますか?私はSVN1.6を使用しています。
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
すべての変更を単一のコミットとして移動します。 (この操作の後、ブランチを削除する必要があります)
私はマージに少し錆びていますが、それでうまくいくべきではありませんか?
svn merge -rREV1:REV2 svn://server/branch my_trunk_wc
見る:
svn merge --help
ブランチのマージを作成し、ブランチ内のコミットごとに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
これにより、特定のブランチに指定した各リビジョンがチェックアウトされ、現在のディレクトリでコミットが実行されるため、対応するメッセージで各変更が保持されます。
各チェンジセットをdiffとして保存してから、トランクの上にコミットすることができます。これは一般に「移植」と呼ばれ、これを自動的に行うためのさまざまなツールがあります。
あなたがしたいように聞こえます:
これは、基盤となるSVNアーキテクチャによってサポートされていると思います。しかし、それを提供するクライアントがあるかどうかはわかりません(ただし、svnmuccは複数のcp
、mv
、rm
コマンドに対してそれを行います)。私が持っている以上の調査をしたい場合(それほど多くはかかりません)、またはSVNライブラリを駆動してそれを実行できる独自のクライアントを作成したい場合(難しいかもしれませんが、それでも実行可能)を除きます。次に、上記の2.と3.のいずれかを犠牲にする必要があると思います。
(3を犠牲にすると、直後にリポジトリをダンプし、ダンプファイルをハックして1つのリビジョンのみを使用できますが、わずかに単純なリビジョン履歴を持つだけでリスクを冒す価値はないと思います...)