2010-03-04 94 views
17

我想爲一個開源項目編寫一個多文件補丁,但是自從我開始工作以來,主副本已經發生了變化。我需要在我的未提交版本和從中檢查的版本之間獲得SVN區別(只是版本控制下的文件)。我可以使用哪個SVN命令來找出差異?如何找到工作副本和任意版本之間的svn差異?

編輯:對不起,我一直不適當地使用術語「工作副本」。我需要比較我未提交的修改和它們所基於的修訂版本。換句話說,我檢出了版本1000並更改了文件foobar。現在版本號最大爲1015,但我需要將我的版本foobar與版本1000的版本進行比較。是否有一個簡單的命令來執行此操作(比較我的更改的程序副本與過去的版本)?

+0

我相信你使用的長期「工作副本」正確。當你簽出rev 1000時,你的工作副本是rev 1000的副本。基數是1015並不重要。你只需要將N(通常是基數)指定爲1000,就像所有的命令一樣默認爲base。所以svn diff -r1000應該可以完美地適合你(假設你真的檢出了1000版)。如果你檢查差異本身,它確實說明它比較了什麼版本(正如ezpz在他的回答中所示) – Tom

回答

13

您可以使用-rN:M參數和diff命令來指定要比較的修訂版本。只需提供您的工作副本簽出的修訂(您可以省略M,因爲它默認爲工作副本),並且您應該獲得所需的內容。

如果您不記得原始版本號,請嘗試運行svn status -v,第一欄應顯示它。

更多信息svn help diff ...

7

svn diff需要-rN:M參數,其默認值爲N == BASEM == working copy。請問svn diff -r REV哪裏有REV是你想修改不了的版本?

要回答你的編輯,假設你有以下幾點:

$ ls 
foo bar baz 
$ svn st -u 
Status against revision: 1071 
$ echo "more stuff" >> foo 
$ svn diff -r 1000 foo 
Index: foo 
=================================================================== 
--- foo (revision 1000) 
+++ foo (working copy) 
... 

我相信這是你所追求的,是嗎?

0

如果你的目標是讓剛剛在內容改變了文件名的報告,這應該做的伎倆:

svn diff | grep 'Index: ' .