2009-10-16 84 views
13

當我使用命令行中的'svn diff'時,它會打印出已更改的行,但也會打印出上下文之前和之後未更改的三行。我更喜歡只看到沒有上下文的變化線條。我一直無法確定任何命令行選項,這些選項可以讓我按照這種方式進行操作。標準的「差異」和「CVS差異」做默認情況下我想要的。當然'svn diff'可以做到這一點,但我錯過了一些東西。任何人都知道嗎?如何在使用svn時獲取NO上下文比較

回答

17

通過放鬆觀察上面給出的有用鏈接之後,簡短答案是svn's built -in diff不能做我想要的。你可以告訴它使用標準的外部差異,並通過arg來告訴它你不需要上下文。我把下面的別名在我的.bashrc和現在都工作得很好,如果我使用來代替:

alias svndiff='svn diff --diff-cmd=diff -x -U0' 
+2

'-x'是'svn diff'的擴展參數,它會使緊跟着的標記(這裏是'-U0')傳遞給用'--diff-cmd'指定的diff命令,這裏是'diff'。 – valid 2015-04-21 11:42:06

2

This thread似乎得出結論,您應該使用外部diff命令來控制上下文的數量。

我更喜歡統一比較,所以我的手指總是鍵入

svn diff -x -u 

這意味着使用外部(GNU的diff)命令,我想。

+0

感謝您的有用鏈接。讓我感到驚訝的是,內置的差異不能做我想要的。對我來說,違反了輸出最少的Unix原則。 使用-x -u命令給我的結果與不同。 'svn help diff'告訴我那些是默認值。也許你不需要輸入額外的字符? – DaveBurns 2009-10-16 13:35:24

3

您可以將'svn diff'的結果傳遞給grep並編寫正則表達式來獲取所需內容。例如,試試這個:

svn diff | grep "^[+-\]" 

上面的命令會讓你以'+'或' - '或'\'開頭的所有行。 (如果你想看到差異,例如「\在文件末尾沒有換行符」,那麼你需要'\')。

+0

如果你只想改變線條,這工作正常。但是,它無法輸出有關行號的正確信息。例如。在之前/之後有3行上下文,「@@ -21,7 +21,7 @@」表示第24行改變了。在沒有上下文的情況下,你會看到「@@ -24,1 +24,1 @@」 – kamczak 2015-11-30 17:55:58

4

以上建議仍然產生上下文格式,但0行內容。這仍然不是顛覆之前的傳統差異輸出。

我什麼工作原理是:svn di --diff-cmd=diff -x --normal

--normal選項(在DIFF與OSX的船舶)給出了一些人喜歡傳統的格式。