在svn diff或git diff的符号中,“@@ … @@”meta行是什么意思?
当我使用svn diff或git diff它显示如下行: 
 @@ -1,5 +1,9 @@ 
他们的意思是什么?
这些被称为(c)大头标头,并包含范围信息。
 他们被标志@@包围。 它们的格式是: 
 @@ -l,s +l,s @@ 
 其中l是起始行号, s是变化(c)大块适用于每个相应文件的行数。  -表示原始文件, +表示新的(修改)文件。 请注意,它不仅显示受影响的行,而且还显示上下文行。 
  -1,5在原文件中(用-表示)。 它表明,第一行是开始和5受影响/上下文线 
  +1,9在新的(修改过的)文件中(用+表示),第一行是起始行和9个受影响/上下文行。 
更多细节在这里: http : //en.wikipedia.org/wiki/Diff#Unified_format
简单的例子分析
 格式与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 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。
哈克头
 根据你的git版本和configuration,你也可以在@@行旁边find代码行,例如func1() { in: 
 @@ -4,7 +4,6 @@ func1() { 
 这也可以通过普通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 。 
这个令人敬畏的function通常精确地告诉每个大块属于哪个函数或类,这对解释diff是非常有用的。
如何select标题的algorithm是如何工作的:讨论: git diff hunk头文件的摘录来自哪里?
这些描述了diff diff的影响。 在你的情况下,这意味着大块影响从第1行开始的5行,导致从第1行开始的replace,这是9行长。
请注意,这是统一差异格式使用的格式。 “经典”差异格式使用不同的模型(但是最近使用经典差异?)。