当您查看文件的差异时,它会在顶部显示差异信息,然后突出显示以下更改。
但是,在我看过的每一个例子中...... Github用变化突出显示的行号总是不同于Git在Diff / Patch信息中指定的行号。
例如this commit(注意差异数据显示@@ -362,7 +362,7 @@ def association_instance_set(name, association
,但Github在第365行开始突出显示。)
或者这个:
或者这个:
或者最后这一个:
似乎Github突出显示的实际行号通常比Git指定的补丁/差异数据高约3行。
当我检查他们的API时,请下拉我在上面突出显示并链接的第一个文件,将其吐出到数组中然后使用index
在数组中进行行计数,我得到的结果也不同。< / p>
diff指定更改的行,即362
,使用我的数组转换方法发送到364
,而不是365
,因为Github突出显示它。
所以有点不对劲。
为什么?
答案 0 :(得分:3)
这些补丁没有任何问题,它们看起来应该看起来如何。
统一差异包括 context 的3行(默认情况下,如果git diff
-U<n>
或{{1} }})。
让我们看看你的第一个例子中的 hunk :
--unified=<n>
它表示补丁文件从第362行开始,并且差异中包含7行。如果我们看看差异,我们可以看到它确实从第362行开始并且是7行长。
如果我们更详细地看一下差异,我们会看到第362,363,364行是 verbatim 。第365行标有@@ -362,7 +362,7 @@
(各自-
),因为它已被删除,另一行重新插入。输出中的红色/绿色突出显示。在实际的差异文件中,不的一件事是GitHubs突出显示该行的哪些部分已被更改。这是GitHub的自定义增强。
然后,逐字显示未更改的三个下一个上下文行。
统一差异只是提供上下文行并将它们包含在差异中,而GitHub也会以这种方式显示它。
您有1个更改的行(365),以及上下文之前和之后的3行。总共生成7行,包含在补丁/差异文件中(从362开始)。
答案 1 :(得分:2)
它是“关闭三”,因为diff格式包含实际有变化的行之前的三行。
所以@@ -362,7 +362,7 @@
表示更改发生在第362 + 3 = 365行,但代码的相关部分从第362行开始。
答案 2 :(得分:2)
GitHub(以及一般的统一差异工具)提供了一些变更的背景 - 上面和下面的三行,如果可用的话。使用输出打印的数字包括上下文行。因此,例如,给定一个由数字1到100(每行一个)组成的文件,当对不带数字42的文件进行差异时,上下文显示从第39行开始的7行(或删除后的6行)甚至虽然唯一改变的是第42行。
$ diff -u 100 99
--- 100 2016-07-31 09:31:25.000000000 -0400
+++ 99 2016-07-31 09:31:34.000000000 -0400
@@ -39,7 +39,6 @@
39
40
41
-42
43
44
45