什么是Diff文件语法

Fra*_*anz 9 diff parsing

我目前正在解析diff文件,并且还没有遇到关于diff文件的可靠文档.

我对规格特别感兴趣.例如,我并不真正理解这样的行(在每个更改的代码块的开头):

@@ -296,7 +296,8 @@
Run Code Online (Sandbox Code Playgroud)

我知道它们与行号有关,有多少行改变了,但到目前为止我还无法弄清楚细节.

输出diff文件的语法是什么(至少是主要部分)?

ste*_*nar 7

查看GNU diffutils 的文档.在那里你会找到这个部分:

接下来是一个或多个差异; 每个块显示文件不同的一个区域.统一格式帅哥看起来像这样:

@@ from-file-line-numbers to-file-line-numbers @@
  line-from-either-file
  line-from-either-file...
Run Code Online (Sandbox Code Playgroud)

如果块只包含一行,则只显示其起始行号.否则它的行号看起来像'开始,计数'.一个空的大块被认为是从大块后面的一行开始的.

如果一个Hunk及其上下文包含两行或更多行,则其行号看起来像'start,count'.否则只显示其结束行号.一个空的大块被认为是在大块之前的行结束.

两个文件共有的行以空格字符开头.两个文件之间实际不同的行在左侧打印列中具有以下指示符之一:

'+'这里添加了一行到第一个文件.

' - '此处从第一个文件中删除了一行.


You*_*You 6

实用程序上的Wikipedia页面diff很好地描述了该格式.