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
中的内容(分别为“旧文件”和“您的文件”)来显示冲突是什么。f2
f3
这与生成的内容之间的区别diff3 -e
在于,ed
生成的脚本diff3 -e
将转换f1
为f3
,忽略 中可能的冲突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
(正在修补的文件)的原始内容。