注:而2路hunk则在"===="后加上1,2或3来指出引起不同的那个文件.
$diff3 sigrot.2 sigrot.1
sigrot.3
产生如下的输出(在这里因为空间的原因对输出做了截断):
====
1:3c
#Version
2.0
2:3c
#Version 1.0
3:3c
#Version
3.0
====1
1:9,10c
srcdir=$HOME/doc/signatures
srcfile=$srcdir/$sigfile
2:8a
3:8a
====1
1:12c
old=$(cat $srcdir/num)
2:10c
3:10c
old=$(cat
num)
...
第一个hunk是3路hunk,其他的都是2路hunk.从sigrot.1或sigrot.3中生成sigrot.2时,必须把从sigrot.2中来的下面两行添加到sigrot.1或sigrot.3的第8行后:
srcdir=$HOME/doc/signatures
srcfile=$srcdir/$sigfile
类似地,若要依据sigrot.2来生成sigrot.1,必须把sigrot.1的第10行改为sigrot.2中来的第12行.
可以使用-m或--merge选项来告诉diff3对文件进行合并,然后再手工对结果排序:
$diff3
-m sigrot.2 sigrot.1 sigrot.3 > sigrot.merged
程序清单6.7
使用diff3合并选项产生的输出
#!/usr/local/bin/bash
#sigrot.sh
<<<<<<<
sigrot.2
#Version 2.0
|||||||sigrot.1
#Version
1.0
=======
#Version 3.0
>>>>>>>
sigrot.3
#Rotate signatures
#Suitable to be run via
cron
############################
sigfile=signature
srcdir=$HOME/doc/signatures
srcfile=$srcdir/$srcfile
old=$(cat $srcdir/num)
let new=$(expr $old+1)
if [ -f $srcfile.$new ];
then
cp $srcfile.$new $HOME/.$sigfile
echo $new > $srcdir
/num
else
cp $srcfile.1 $HOME/.$sigfile
echo 1 > $srcdir
/num
fi
return
0
"<<<<<<<"标记对应myfile,">>>>>>>"对应yourfile,"|||||||"对应oldfile.在本例中,只需要最新的版本号,为了成功合并3个版本,将删除标记行和1.0及2.0版本指定的行.