2012-01-16 7 views
3

私はマージ問題を抱えています:SVN:コードレビューのために、ブランチからブランチへの差分を作成するにはどうすればいいですか?

私はトランクをコピーして、rev 1000を作成してブランチを作成しました。次にブランチに という新しいファイルblah.txtを追加しました。今私は、この(および他の )をマージしたいバックトランクの私のチェックアウトに変更します。

cd ~/trunk-checkout 
svn merge -r 1000:2000 $REPOS/branches/foo 
A blah.txt 

トランクのチェックアウトで私の新しいファイルblah.txtを作成します。しかし、私が と言うとき:

svn diff blah.txt 

出力は空です。 がまだトランクに存在しないので、出力はファイル全体ではありませんか?

blah.txtという新しいファイルが含まれているsvn-diffをトランクに追加するにはどうすればよいですか?

svn diff -r HEAD $REPOS/trunk/foo 

それが空である:私は(新しいファイルblah.txtがあるディレクトリに)これを言うでも

私の質問の背景は:私はコードレビュー(here参照)のためにトランクに私のコード(ブランチにある)のdiffを提出する必要があります。 diffは次のようになります。あなたはsvn cpとトランクからブランチをコピーした場合

$ svn diff blah.txt 
Index: blah.txt 
=================================================================== 
--- blah.txt (revision 0) 
+++ blah.txt (revision 0) 
@@ -0,0 +1 @@ 
+hello world 

答えて

2

、あなたはsvn merge --reintegrateとそれをバック再統合すべきです。 --reintegrateと特定のリビジョン番号-r ...(理由は?)を除いてマージしています。

ので、一般的なワークフローは次のように行く必要があります。別の方法があり

trunk $ svn diff 
... all the changes that were done in foo ... 

svn cp ^/trunk/ ^/branch/foo 

#In the foo branch working copy: 
foo $ work, work, work... 

#In the working copy of trunk: 
trunk $ svn merge --reintegrate ^/branch/foo 

はその後svn diffを実行すると、あなたがブランチで行ったすべての変更を表示しますあなたの問題を解決する。特定のブランチで行われた変更のすべて(または一部)の差分を取得するには、マージする必要はありません。 svn diffを使用すれば十分です。

diffで表示する変更を決定します。あなたはブランチを作成したリビジョンで決定したい場合は、

svn log -v |less 

行います: 使用svn logは、どの改訂作業が行われていたからチェックし

svn log -v --stop-on-copy | less 

最後のログエントリをなります支店の最初の改訂となる。

-r(範囲)でsvn diffを実行します。

svn diff -r FROM-1:TO . 

あなたは支店で最後にコミットされたリビジョンを示すためにHEADキーワードの代わりに、リビジョン番号を使用することができます。

だから、あなたが実行する必要がありますすべてのあなたの分岐作業の差分を取得する: FIRST_BRANCH_REVは枝の最初のリビジョンです

svn diff -r FIRST_BRANCH_REV:HEAD 

関連する問題