2012-01-16 25 views
3

我有一個問題,合併:SVN:如何創建分支到主幹的差異,用於代碼審查?

我通過複製主幹,建立轉1000。然後,我添加了一個新的 文件blah.txt分支創建一個分支。現在,我要合併這(和其他 )變回我的行李箱結帳:

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

,在樹幹結帳我創建新的文件blah.txt。但當我 說:

svn diff blah.txt 

輸出爲空。不應該輸出整個文件,因爲 還不存在於中繼?

如何獲得svn-diff到trunk,其中包含 全新文件blah.txt?

即使我這樣說(在新文件blah.txt是目錄):

svn diff -r HEAD $REPOS/trunk/foo 

它是空的。

我的問題的背景是:我需要將我的代碼(位於分支上)的差異提交到主幹以進行代碼審查(請參閱here)。該差異應該是這樣的:

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

回答

2

如果您複製分支從樹幹svn cp,你應該重新整合它帶回svn merge --reintegrate。您正在合併而沒有--reintegrate和特定修訂範圍-r ...(爲什麼?)。

所以,一般的工作流程應該是這樣的:

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會告訴你在分公司做的所有更改:

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

還有另一種方式解決你的問題。爲了獲得所有(或部分)在特定分支中完成的更改的差異,您不需要合併。使用svn diff就足夠了:

確定您想在差異中看到哪些更改。 使用svn log檢查從哪個和哪個修訂工作已完成:

svn log -v |less 

如果你想確定在哪個版本創建一個分支,執行:

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

最後的日誌條目將成爲分支的第一次修訂。

現在用-r(範圍)執行svn diff

svn diff -r FROM-1:TO . 

您可以使用關鍵字HEAD而不是版本號來表示在分支中的最後提交的版本。

因此,要獲得所有分支機構的工作,你將需要運行的DIFF:

svn diff -r FIRST_BRANCH_REV:HEAD 

其中FIRST_BRANCH_REV是分支的第一次修訂。