我正在尝试为使用kdiff3进行合并和冲突解决的git编写合并驱动程序。
我需要一种方法来了解kdiff3是否在合并中成功。
到目前为止,我已经得到了这个:
#!/bin/bash
Kdiff3 "${1}" "${2}" "${3}" -o "${1}" --L1 "Working Copy" --L2 "Nearest Common ancestor" --L3 "Version from Other Branch"
exit 1
由于退出1告诉git合并是否成功,我想根据kdiff3的成功设置它。
有没有办法做到这一点,我完全失踪了?
答案 0 :(得分:1)
您可以通过检查输出是否已由kdiff3写入来判断自动合并是否有效,如this thread
中所述如果未明确指定输出文件(通过
-o
),则第三个(最后一个)文件将成为目标。合并后退出状态为0,成功保存输出文件 如果退出而没有保存,则为1。
这是this script正在测试的内容(此处为示例),但使用diff3
:
(使用kdiff3 command-line options,您需要在命令行中添加-auto
选项)
echo "Attempting to auto-merge ${baseFileName}" 1>&2
diff3 -L $labelMine -L $labelOlder -L $labelTheirs -Em $mine $older $theirs > $output
if [ $? = 1 ]; then
#Can't auto merge
rm -f $output
$VDIFF3 $older $mine $theirs --L1 $labelOlder --L2 $labelMine --L3 $labelTheirs -o $output --auto 1>&2
bLoop=1
if [ -f $output ]; then
if [ -s $output ]; then
#output succesfully written
bLoop=0
fi
fi
if [ $bLoop = 0 ]; then
cat $output
rm -f $output
exit 0
else
echo "Merge failed, try again" 1>&2
fi
else
#We can automerge, and we already did it
cat $output
rm -f $output
exit 0
fi
;;