web-dev-qa-db-ja.com

kdiff3をSVNのマージツールとして設定する方法

SVNが競合について通知したときに、kdiff3を使用して競合を解決できるようにしたいと思います。これのデフォルトツールとして設定するにはどうすればよいですか?

27
gruszczy

Subversion構成ファイル(/etc/Subversion/configまたは~/.Subversion/config)に移動し、お気に入りのツールを使用してmerge-tool-cmd変数を設定します。

### Set merge-tool-cmd to the command used to invoke your external
### merging tool of choice. Subversion will pass 4 arguments to
### the specified command: base theirs mine merged
# merge-tool-cmd = merge_command

4つのプレーン引数をサポートしないkdiff3には問題がありますが(SVNは4つのプレーン引数をkdiff3に渡し、機能しません)、通常、引数を変換するために単純なスクリプトで呼び出されます(例:「kdiff3caller」)。

#!/bin/sh
kdiff3 "$1" "$2" "$3" -o "$4"

このkdiff3の問題と解決策について説明します ここ

より短く、新しいバージョンのSVN(SVN 1.7.7でテスト済み)で動作するソリューション:

スクリプトを作成する〜/ svn-merge-kdiff

#!/bin/bash

# Useful when something fails
LOG=~/svn-merge-kdiff-last-run.log
echo "arguments passed to $0: $@" > $LOG

# Now, don't think you will get the $1, $2, etc... by referencing.
# At first, you have to copy it to an array
for i in $@; do
    args=( ${args[@]} $i )
done

echo "parsed args" >> $LOG
for i in ${args[@]}; do
    echo $i >> $LOG
done

# I keep it in case something changes
if [ "${args[1]}" == "-m" ] && [ "${args[2]}" == "-L" ] && [ "${args[3]}" == ".mine" ];then
    command="kdiff3 --L1 ${args[5]} --base ${args[9]} --L2 ${args[7]} ${args[10]} --L3 ${args[3]} ${args[8]} -o merged"
    $command
    if [[ $? -ne 0 ]]; then
        echo "$command failed" >> $LOG
        exit 1
    fi

    # You have to do this, otherwise after the merge you will see... empty file(?)
    cat merged

    rm merged
    exit 0
fi

exit -1

〜/ .Subversion/configでsvnにバインドします

diff3-cmd = ~/svn-merge-kdiff
4
Adam

Yvoyerの回答のスクリプトは私にとって非常にうまく機能し、SVN1.4を使用しています。 JonAnderOrtizDurántezからの以前の回答はSVN1.5以降で機能し、このスクリプトは1.5より前のSVNバージョンで機能すると思います。バージョン1.5では--diff-cmdと--diff3-cmdに変更があったようです。次の2つのSVNドキュメントのスクリプトを比較して、いくつかの違いを確認してください。

Michael Bradleyのスクリプトは、svn update中に競合が発生した場合、解決が非常に難しい「>>>>>>>>」競合マーカーでファイル全体をバーフィングする代わりに、kdiff3を起動するので非常に便利です。複雑な競合がある場合。 diff3-cmdは、マージと更新の両方で機能します。

diff3-cmd = /usr/local/bin/svndiff3をsdiffに送信する独自​​のスクリプトを作成し、~/.Subversion/configで指定されているため、--diff3-cmdsvn diffに追加します(またはコマンドラインで--diff-cmdを使用します)。

このスクリプトは yolinux に投稿され、わずかに変更されたバージョン(自動マージを処理する)はここに投稿されます Jawspeak

3
chetto