SVNが競合について通知したときに、kdiff3を使用して競合を解決できるようにしたいと思います。これのデフォルトツールとして設定するにはどうすればよいですか?
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
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-cmd
をsvn diff
に追加します(またはコマンドラインで--diff-cmd
を使用します)。
このスクリプトは yolinux に投稿され、わずかに変更されたバージョン(自動マージを処理する)はここに投稿されます Jawspeak 。