1

我正在尝试为 git 编写一个合并驱动程序,该驱动程序使用 kdiff3 进行合并和冲突解决。

我需要一种方法来知道 kdiff3 在合并中是否成功。

到目前为止,我有这个:

#!/bin/bash

Kdiff3 "${1}" "${2}" "${3}" -o "${1}" --L1 "Working Copy" --L2 "Nearest Common ancestor" --L3 "Version from Other Branch"

exit 1

由于exit 1告诉git合并是否成功,我想根据kdiff3的成功来设置它。

有没有办法做到这一点,我完全错过了?

4

1 回答 1

1

您可以通过检查输出是否已由 kdiff3 写入来判断自动合并是否有效,如该线程中所述

如果您没有明确指定输出文件(通过-o),那么第三个(最后一个)文件将是目标。

合并后成功保存输出文件时,退出状态为 0。
如果您不保存就退出,则为 1。

这就是这个脚本正在测试的(这里作为一个例子),但是使用diff3:(
使用kdiff3 命令行选项,你应该需要将-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
    ;;
于 2012-11-10T11:28:57.963 回答