我该如何理解 diff3 的“-A”和“-e”的不同输出?

我该如何理解 diff3 的“-A”和“-e”的不同输出?

diffutils 手册说,在diff3 -A mine older yours

'--show-all' ('-A') 选项的作用类似于 '-e' 选项,不同之处在于它将冲突括起来,并且它输出从older到 的所有更改yours,而不仅仅是未合并的更改。

我有三个文件,每个文件有四行数字

$ paste f1 f2 f3
0   0   1
2   1   2
2   3   3
4   5   6

没有合并的更改是否正确,因此-A-e都应该仅输出未合并的更改?

我该如何理解以下不同的输出 by-A和 by -e?我想我缺乏一些知识来ed理解-A.例如,我不确定此命令在 输出末尾执行什么操作-A。通常a命令后面跟着要添加的行,但命令后面似乎没有任何行:

0a
<<<<<<< f1
.

谢谢。


f2在从到 的更改中f3,未合并的更改是

$ diff3 -e f1 f2 f3
1,4c
1
2
3
6
.

f2从到 的所有更改f3(包括未合并和合并的更改)为:

$ diff3 -A f1 f2 f3
4a
||||||| f2
0
1
3
5
=======
1
2
3
6
>>>>>>> f3
.
0a
<<<<<<< f1
.

答案1

ed如果将生成的脚本应用diff3 -A到原始文件,您将看到它实际执行的操作:

$ diff3 -A f[123] >script.ed

(我patch在这里使用,但您也可以使用ed,但是您必须在脚本末尾添加一个命令,以将缓冲区写回文件 ( w) 或在终端上打印出来 ( %p))

$ patch f1 script.ed
Hmm...  Looks like an ed script to me...
Patching file f1 using Plan A...
done
$ cat f1
<<<<<<< f1
0
2
2
4
||||||| f2
0
1
3
5
=======
1
2
3
6
>>>>>>> f3

这表明对文件的这一位的编辑(恰好是所有的在此特定示例中的文件)是冲突(它在<<<<<<<和之间“括起来” >>>>>>>)。它通过提供(“我的文件”)的内容,后跟和f1中的内容(分别为“旧文件”和“您的文件”)来显示冲突是什么。f2f3

这与生成的内容之间的区别diff3 -e在于,ed生成的脚本diff3 -e将转换f1f3,忽略 中可能的冲突f2

$ diff3 -e f[123] >script.ed
$ patch f1 script.ed
Hmm...  Looks like an ed script to me...
Patching file f1 using Plan A...
done
$ cat f1
1
2
3
6

因此,当手册说“它包含冲突”时,这意味着如果您将差异应用为补丁,它将把这些冲突标记插入到结果文件中。


到那个时刻读取差异,如果不知道的话就有点困难了ed

4a
||||||| f2
0
1
3
5
=======
1
2
3
6
>>>>>>> f3
.
0a
<<<<<<< f1
.

您评论的最后一部分,

0a
<<<<<<< f1
.

<<<<<<< f1在正在编辑的文件的顶部插入文字行。这样,差异本身就不必包含f1(正在修补的文件)的原始内容。

相关内容