“@@…@@”;svn diff或git diff mean中带有at符号的元线?
当我使用“@@…@@”;svn diff或git diff mean中带有at符号的元线?,git,svn,diff,Git,Svn,Diff,当我使用svn diff或git diff时,它会显示如下行: @@ -1,5 +1,9 @@ 它们是什么意思?这些描述了受差异影响的线条。在您的例子中,这意味着该大块影响从第1行开始的5行,从而导致从第1行开始的替换,该替换有9行长 请注意,这是统一diff格式使用的格式。“经典”diff格式使用不同的模型(但现在谁使用经典diff?)这些称为(c)hunk header并包含范围信息 它们周围有两个at标志@。它们的格式如下: @@ -l,s +l,s @@ 其中,l是起始行号,s是更改
svn diff
或git diff
时,它会显示如下行:
@@ -1,5 +1,9 @@
它们是什么意思?这些描述了受差异影响的线条。在您的例子中,这意味着该大块影响从第1行开始的5行,从而导致从第1行开始的替换,该替换有9行长 请注意,这是统一diff格式使用的格式。“经典”diff格式使用不同的模型(但现在谁使用经典diff?)这些称为(c)hunk header并包含范围信息 它们周围有两个at标志
@
。它们的格式如下:
@@ -l,s +l,s @@
其中,l
是起始行号,s
是更改(c)hunk对每个文件应用的行号。-
表示原始文件,+
表示新的(修改的)文件。请注意,它不仅显示受影响的行,还显示上下文行
-1,5
位于原始文件中(由-
指示)。它显示第一行是起始行,5行受影响/上下文行
+1,9
位于新的(修改的)文件中(由+
指示),第一行是起始行和9个受影响的/上下文行
更多详细信息请参见:简单示例分析 格式与
diff-u
unified diff基本相同
例如:
diff -u <(seq 16) <(seq 16 | grep -Ev '^(2|3|14|15)$')
@-1,6+1,4@
表示:
表示第一个文件的这部分从第1行开始,总共显示6行。因此,它显示了第1行到第6行-1,6
1 2 3 4 5 6
表示“旧的”,因为我们通常将其称为-
diff-u old-new
表示第二个文件的这部分从第1行开始,总共显示4行。因此,它显示了第1行到第4行+1,4
表示“新建” 我们只有4行而不是6行,因为删除了2行!新的帅哥只是:+
1 4 5 6
@-11,6+9,4@
对于第二个大块头来说是类似的:
- 在旧文件中,我们有6行,从旧文件的第11行开始:
11 12 13 14 15 16
func1() { 1; 2; 3; 4; 5; 6; 7; 8; 9; }
- 在新文件中,我们有4行,从新文件的第9行开始:
请注意,行11 12 13 16
是新文件的第9行,因为我们已经删除了前一个hunk上的2行:2和311
@
行旁边获得一个代码行,例如func1(){
:
@@ -4,7 +4,6 @@ func1() {
这也可以通过普通diff
的-p
标志获得
示例:旧文件:
11
12
13
14
15
16
func1() {
1;
2;
3;
4;
5;
6;
7;
8;
9;
}
如果我们删除行6
,则差异显示:
@@ -4,7 +4,6 @@ func1() {
3;
4;
5;
- 6;
7;
8;
9;
请注意,这不是func1
的正确行:它跳过了1
和2
行
这个令人敬畏的特性通常会准确地告诉每个hunk属于哪个函数或类,这对于解释差异非常有用
选择页眉的算法是如何准确工作的,讨论内容如下:Superset:这可能是对diff hunk的最好解释。我有一个@20,7+20,8@@UserDefinedStitcher,我想它可能告诉我,我的更改是在第20行,或者更确切地说,是从第6行开始的20行。(第6行表示UserDefinedStitcher。)但这将我带到第26行,但我的更改在第23行。因此,git似乎超出了3行。发生了什么事?@请给出一个最小的可复制示例。啊,我看到20是文件开头的绝对行号。第20行是显示的上下文开头的行,我的更改是我下面的3行n上下文,因此是第23行。呸!:)那么数字指的是hunk+上下文?即git打印的行是hunk(更改)行加上hunk(更改)前的3行和hunk(更改)后的3行行。因此,行的范围是从上下文的开始到上下文的结束,即从第一个更改行之前的3行到最后一个更改行之后的3行?@将让我进一步消除歧义。当您看到类似于
-1,5
和+1,9
的内容时,它非常简单。1
表示和中的起始行号5
表示(原始文件中未更改的行数+删除的行数),而9
表示(新文件中未更改的行数+添加的行数)。因此,您可以有一个类似于文件的东西,其中有5行是您开始使用的,而不使用它们,然后在新提交中添加4行,您的差异将如上所示。