svn diff -r $new:$old $file --summarize
,以找出是否$新老$之間的$文件更改。但是,如果我反覆添加和刪除文件。如
加$文件修訂230
刪除$文件修訂231
加$文件修訂232
而$文件增加了在230和232是相同的路徑和相同的名稱,但內容不同,然後致電
svn diff -r $230:$232 $file --summarize
svn顯示沒有任何變化,而我期望的結果告訴我$文件被修改。
我該如何解決這個問題?
svn diff -r $new:$old $file --summarize
,以找出是否$新老$之間的$文件更改。但是,如果我反覆添加和刪除文件。如
加$文件修訂230
刪除$文件修訂231
加$文件修訂232
而$文件增加了在230和232是相同的路徑和相同的名稱,但內容不同,然後致電
svn diff -r $230:$232 $file --summarize
svn顯示沒有任何變化,而我期望的結果告訴我$文件被修改。
我該如何解決這個問題?
首先,--summarize選項有一個特定的目的,主要是比較文件樹時。它只是顯示差異文件的列表,而不是每個文件的詳細差異。當用於單個文件時它沒有價值。
其次,差異總是簡單地比較文件或樹的兩個快照。它並不關心文件如何進入它所處的狀態,而是它在快照中的樣子。例如,如果您在一個修訂版本中刪除了一段代碼,請將其重新添加到下一個版本中,然後在三分之一內更改一行。然後在所有這些之前用代碼對當前修訂版進行差異化,它只會顯示一行代碼已更改。它沒有考慮到其間發生的任何變化。
如果您希望查看修訂範圍內的所有更改,則需要使用svn log。
儘管您正在添加具有相同名稱的文件,SVN會在內部將它視爲兩個實體。因此,您的命令試圖找到版本231和232之間文件的修訂版本,其中修訂版231當前文件甚至不在SVN中。在這種情況下,您必須在父文件夾上執行svn diff
而不是在文件上。
本身和其父文件夾都不顯示差異。做一個實驗,你會發現它是錯誤的。 –
是的Ringo,我已經測試過,對我來說工作得很好。它顯示爲文件被修改時,我給文件夾上的差異。我的SVN版本是1.8.3 –
diff不知道文件的祖先。刪除文件並添加具有相同名稱和內容的新文件不會被視爲更改,即使存儲庫會將新文件作爲單獨的歷史記錄行進行跟蹤。 –
svn日誌可以修復它 –