1

マージと競合解決に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の成功に基づいて設定したいと思います。

私が完全に欠けているこれを行う方法はありますか?

4

1 に答える 1

1

このスレッドで言及されているように、出力が kdiff3 によって書き込まれたかどうかを確認することで、自動マージが機能したかどうかを確認できます。

出力ファイルを ( 経由で) 明示的に指定しない場合-o、3 番目 (最後) のファイルが出力先になります。

マージ後に出力ファイルが正常に保存された場合、終了ステータスは 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 に答える