散装手册说,在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都应该只输出未合并的更改,这是否正确?
如何理解-A和-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
.发布于 2019-04-25 17:32:54
如果将diff3 -A生成的D1脚本应用到原始文件中,您将看到它实际上做了什么:
$ 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 ("my“)的内容,以及f2和f3中的内容(分别为”旧文件“和”您的文件“)来说明冲突是什么。
这与diff3 -e产生的不同之处在于,diff3 -e生成的ed脚本将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因此,当手册中说“它括号冲突”时,意味着如果将diff作为补丁应用,它将将这些冲突标记插入到结果文件中。
当涉及到阅读差异时,如果您不了解ed,那就有点困难了。
4a
||||||| f2
0
1
3
5
=======
1
2
3
6
>>>>>>> f3
.
0a
<<<<<<< f1
.最后一部分,你的评论,
0a
<<<<<<< f1
.在正在编辑的文件顶部插入文字行<<<<<<< f1。这样,diff本身就不必包含f1的原始内容(正在修补的文件)。
https://unix.stackexchange.com/questions/480987
复制相似问题