2

私の質問は、SVN マージ メカニズムのいくつかの基礎に関連しています。ここではマージの問題を報告していません。さらに、私はSVNブックのマージの章を通過しました(初心者ではありません)。

トランクに 10 個のリビジョンがあり、リビジョン 5、6、7、8、9、および 10 を特定のタグにマージしたいと考えています。

マージ操作を 6 回実行することで、tortoise SVN でマージを成功させることができました。毎回、リビジョンを 1 つだけ指定しました (つまり、5、6、7、8、9、10)。

SVN リビジョンの私の理解が正しければ、リビジョン 10 (HEAD リビジョン) には、以前のリビジョン、つまり 5、6、7、および 9 のすべての修正が含まれています。したがって、リビジョン 10 を指定することにより、マージ操作を 1 回だけ実行することで時間を節約できたはずです。

私の質問に対する明らかな反応は、「修正の範囲」を指定する必要があるということです。

私の質問は、リビジョン 10 に以前のリビジョンのすべての変更が含まれる場合に範囲を指定する理由です ( http://svnbook.red-bean.com/en/1.7/svn-book.html#svn.basic.in-action )? 単一のリビジョン (番号 10) を指定してマージを実行し、SVN が正しいマージを実行することを期待することはできませんか?

4

1 に答える 1

0

実際には、svn mergeコマンドは差分 (または変更セット) を引数として取っています。したがって、次のようなコマンドを使用してマージする場合:

svn merge -c10 URL

実際には次と同じです:

svn merge -r9:10 URL

リポジトリへの 10 回目のコミットによってもたらされた変更をマージしています。

さらに、このsvn:mergeinfoプロパティは、リビジョン 10 に対応する変更セットが既にマージされていることを示します。これにより、後続のマージがよりスマートになり、その変更セットを 2 回マージしようとしなくなります。

したがって、質問に具体的に答えるには、 特定の範囲に対応する変更svn mergeをマージするときに、コマンドにリビジョンの範囲を指定します。

ドキュメントに変更とチェンジセットに関する通知があります:

Subversion では、グローバル リビジョン番号 N は、リポジトリ内のツリーに名前を付けます。これは、リポジトリが N 番目のコミット後に見た方法です。これは、暗黙的な変更セットの名前でもあります。ツリー N とツリー N-1 を比較すると、コミットされた正確なパッチを導き出すことができます。このため、リビジョン N を単なるツリーではなくチェンジセットと考えるのは簡単です。イシュー トラッカーを使用してバグを管理している場合は、リビジョン番号を使用して、バグを修正する特定のパッチを参照できます。たとえば、「この問題は r9238 で修正されました」などです。その後、誰かが svn log -r 9238 を実行して、バグを修正した正確なチェンジセットを読み、 svn diff -c 9238 を実行してパッチ自体を確認できます。そして (すぐにわかるように) Subversion の svn merge コマンドはリビジョン番号を使用できます。

于 2013-03-07T10:01:44.547 に答える