svn比較 - svn trunk git master




svn diff或git diff中的符號“@@... @@”元行是什麼意思? (2)

當我使用svn diffgit diff它顯示如下行:

@@ -1,5 +1,9 @@

他們的意思是什麼?


簡單的例子分析

格式與diff -u統一差異基本相同。

例如:

diff -u <(seq 16) <(seq 16 | grep -Ev '^(2|3|14|15)$')

這裡我們刪除了第2,3,14和15行。輸出:

@@ -1,6 +1,4 @@
 1
-2
-3
 4
 5
 6
@@ -11,6 +9,4 @@
 11
 12
 13
-14
-15
 16

@@ -1,6 +1,4 @@表示:

  • -1,6 :此部分對應於第一個文件的第1行到第6行:

    1
    2
    3
    4
    5
    6
    

    -意思是“舊”,因為我們通常將其稱為diff -u old new

  • +1,4表示該部分對應於第二個文件的第1行到第4行。

    +表示“新”。

    我們只有4行代替6行,因為刪除了2行! 新的大塊頭只是:

    1
    4
    5
    6
    

@@ -11,6 +9,4 @@對於第二個大塊頭是類似的:

  • 在舊文件上,我們有6行,從舊文件的第11行開始:

    11
    12
    13
    14
    15
    16
    
  • 在新文件中,我們有4行,從新文件的第9行開始:

    11
    12
    13
    16
    

    請注意,第11行是新文件的第9行,因為我們已經刪除了前一個塊上的2行:2和3。

Hunk標題

根據您的git版本和配置,您還可以獲得@@行旁邊的代碼行,例如func1() { in:

@@ -4,7 +4,6 @@ func1() {

這也可以通過plain diff-p標誌獲得。

示例:舊文件:

func1() {
    1;
    2;
    3;
    4;
    5;
    6;
    7;
    8;
    9;
}

如果我們刪除第6行,則diff顯示:

@@ -4,7 +4,6 @@ func1() {
     3;
     4;
     5;
-    6;
     7;
     8;
     9;

請注意,這不是func1的正確行:它跳過第1行和第2

這個很棒的功能通常可以準確地告訴每個hunk屬於哪個函數或類,這對於解釋diff非常有用。

選擇標題的算法如何正常工作在下面討論: git diff hunk標題中的摘錄來自哪裡?


這些描述了受差異大塊影響的線條。 在你的情況下,這意味著大塊從第1行開始影響5行,導致從第1行開始的替換,長度為9行。

請注意,這是統一diff格式使用的格式。 “經典”diff格式使用了不同的模型(但是現在誰使用經典差異?)。





diff