2014-01-14 32 views
0

我用如何SVN差異找出差異文件時,我添加和刪除一遍又一遍

svn diff -r $new:$old $file --summarize 

,以找出是否$新老$之間的$文件更改。但是,如果我反覆添加和刪除文件。如

  1. 加$文件修訂230

  2. 刪除$文件修訂231

  3. 加$文件修訂232

而$文件增加了在230和232是相同的路徑和相同的名稱,但內容不同,然後致電

svn diff -r $230:$232 $file --summarize 

svn顯示沒有任何變化,而我期望的結果告訴我$文件被修改。

我該如何解決這個問題?

回答

1

首先,--summarize選項有一個特定的目的,主要是比較文件樹時。它只是顯示差異文件的列表,而不是每個文件的詳細差異。當用於單個文件時它沒有價值。

其次,差異總是簡單地比較文件或樹的兩個快照。它並不關心文件如何進入它所處的狀態,而是它在快照中的樣子。例如,如果您在一個修訂版本中刪除了一段代碼,請將其重新添加到下一個版本中,然後在三分之一內更改一行。然後在所有這些之前用代碼對當前修訂版進行差異化,它只會顯示一行代碼已更改。它沒有考慮到其間發生的任何變化。

如果您希望查看修訂範圍內的所有更改,則需要使用svn log。

+0

svn日誌可以修復它 –

0

儘管您正在添加具有相同名稱的文件,SVN會在內部將它視爲兩個實體。因此,您的命令試圖找到版本231和232之間文件的修訂版本,其中修訂版231當前文件甚至不在SVN中。在這種情況下,您必須在父文件夾上執行svn diff而不是在文件上。

+0

本身和其父文件夾都不顯示差異。做一個實驗,你會發現它是錯誤的。 –

+0

是的Ringo,我已經測試過,對我來說工作得很好。它顯示爲文件被修改時,我給文件夾上的差異。我的SVN版本是1.8.3 –

+0

diff不知道文件的祖先。刪除文件並添加具有相同名稱和內容的新文件不會被視爲更改,即使存儲庫會將新文件作爲單獨的歷史記錄行進行跟蹤。 –