SVNが私にその矛盾を通知すると、kdiff3を使って矛盾を解決したいと考えています。これをデフォルトのツールとして設定するにはどうすればよいですか? Subversionの設定ファイル(/etc/subversion/config
または~/.subversion/config
)へSVN用のマージツールとしてkdiff3を設定する方法
答えて
移動し、お好みのツールで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の問題やゾル訳はhereです。
このスクリプトはどこか覚えられませんでした。著者はMichael Bradleyです。
私の答えはJon Ander OrtizDurántezの答えに似ています。だから彼の答えがうまくいかなければ、あなたはバックアップを持っています。私はかつて彼が提案したようなものを試しましたが、すべてを解決したこのスクリプトが見つかるまで、パラメータで何らかのエラーを出力します。
は、スクリプトファイルを作成し、~/.subversion/config
#!/bin/bash # Return an errorcode of 0 on successful merge, 1 if unresolved conflicts # remain in the result. Any other errorcode will be treated as fatal. # Author: Michael Bradley #NOTE: all output must be redirected to stderr with "1>&2" as all stdout output is written to the output file # Must be called by subversion in "~/.subversion/config" file # Add config : "diff-cmd = /path/to/script/myKdiff3.sh" VDIFF3="kdiff3" DIFF3="diff3" DIFF="kdiff3" promptUser() { read answer case "${answer}" in "M" ) echo "" 1>&2 echo "Attempting to merge ${baseFileName} with ${DIFF}" 1>&2 $VDIFF3 $older $mine $theirs --L1 $labelOlder --L2 $labelMine --L3 $labelTheirs -o $output 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 ;; "m" ) echo "" 1>&2 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 ;; "diff3" | "Diff3" | "DIFF3" ) echo "" 1>&2 echo "Diffing..." 1>&2 $VDIFF3 $older $mine $theirs --L1 $labelOlder --L2 $labelMine --L3 $labelTheirs 1>&2 ;; "diff" | "Diff" | "DIFF" ) echo "" 1>&2 echo "Diffing..." 1>&2 $DIFF $mine $theirs -L $labelMine -L $labelTheirs 1>&2 ;; "A" | "a" ) echo "" 1>&2 echo "Accepting remote version of file..." 1>&2 cat ${theirs} exit 0 ;; "I" | "i" ) echo "" 1>&2 echo "Keeping local modifications..." 1>&2 cat ${mine} exit 0 ;; "R" | "r" ) echo "" 1>&2 echo "Reverting to base..." 1>&2 cat ${older} exit 0 ;; "D" | "d" ) echo "" 1>&2 echo "Runnig diff3..." 1>&2 diff3 -L $labelMine -L $labelOlder -L $labelTheirs -Em $mine $older $theirs #Exit with return vaule of the diff3 (to write out files if necessary) exit $? ;; "S" | "s" ) echo "" 1>&2 echo "Saving for later..." 1>&2 cat ${mine} #Exit with return vaule of 1 to force writting of files exit 1 ;; "Fail" | "fail" | "FAIL" ) echo "" 1>&2 echo "Failing..." 1>&2 exit 2 ;; "H" | "h" ) echo "" 1>&2 echo "USAGE OPTIONS:" 1>&2 echo " [A]ccept Accept $labelTheirs and throw out local modifications" 1>&2 echo " [D]efault Use diff3 to merge files (same behavior as vanilla SVN)" 1>&2 echo " [Fail] Kills the command (not suggested)" 1>&2 echo " [H]elp Print this message" 1>&2 echo " [I]gnore Keep your locally modified version as is" 1>&2 echo " [M]erge Manually merge using ${VDIFF3}" 1>&2 echo " [m]erge Same as "M" but attempts to automerge if possible" 1>&2 echo " [R]evert Revert to base version (${labelOlder})" 1>&2 echo " [S]ave Same as 'I' but writes out rold, rnew, and rmine files to deal with later" 1>&2 echo " [diff] Type 'diff' to diff versions $labelMine and $labelTheirsthe before making a descision" 1>&2 echo " [diff3] Type 'diff3' to diff all three versions before making a descision" 1>&2 echo "" 1>&2 ;; * ) echo "'${answer}' is not an option, try again." 1>&2 ;; esac } if [ -z $2 ] then echo ERROR: This script expects to be called by subversion exit 1 fi if [ $2 = "-m" ] then #Setup vars labelMine=${4} labelOlder=${6} labelTheirs=${8} mine=${9} older=${10} theirs=${11} output=${9}.svnDiff3TempOutput baseFileName=`echo $mine | sed -e "s/.tmp$//"` #Prompt user for direction while [ 1 ] do echo "" 1>&2 echo "${baseFileName} requires merging." 1>&2 echo "" 1>&2 echo "What would you like to do?" 1>&2 echo "[M]erge [A]ccept [I]gnore [R]evert [D]efault [H]elp" 1>&2 promptUser done else L="-L" #Argument option for left label R="-L" #Argument option for right label label1=$3 #Left label label2=$5 #Right label file1=$6 #Left file file2=$7 #Right file $DIFF $file1 $file2 $L "$label1" $L "$label2" & #$DIFF $file1 $file2 & #wait for the command to finish wait fi exit 0
そのスクリプトは、クォートに多くの修正を加えずにスペースを含むファイル名を扱うことはできません。 '$ older'への参照を' "$ older"などがあります。 –
多分あなたは[ここ](https://negativesum.net/tech/log/using-kdiff3-with-svn/)を見つけましたか? –
@AdamSpiers、ソースのおかげで。 – yvoyer
にdiff-cmd = /path/to/script.sh
を設定yvoyerの答えからスクリプトは私にとって素晴らしい作品、と私はSVN 1.4を使用しています。私はJon Ander OrtizDurántezの以前の答えはSVN 1.5以上で動作し、このスクリプトは1.5より前のSVNバージョンで動作すると思います。バージョン1.5では--diff-cmd & --diff3-cmdが変更されたようです。
- svnbook.red-bean.com/en/1.4/svn.advanced.externaldifftools &
- svnbook.red-bean.com/en/1.5/svn.advanced.externaldifftools:いくつかの違いを見るために、次の2つのSVNのドキュメントでスクリプトを比較してください。
私はsvn update
の間に紛争を得れば、今それがすべてのように困難な「>>>>>>>>」衝突マーカを使用してファイル上barfingの代わりにKDiff3のに蹴る以来、マイケル・ブラッドリーのスクリプトは本当に便利ですあなたが複雑な告発を持っているなら解決してください。 diff3-cmdは、マージと更新の両方に機能します。
私はsdiffのにsvn diff
を送信するために私自身のスクリプトを書き、--diff-cmd
によって指定されているので~/.subversion/config
にdiff3-cmd = /usr/local/bin/svndiff3
を追加(またはコマンドラインパラメータに--diff3-cmd
を使用します)。
このスクリプトはyolinuxに掲載されており、若干修正されたバージョン(自動マージを処理する)はJawspeakに掲載されています。
短く、(SVN 1.7.7でテスト)SVNのそれ以降のバージョンで動作するソリューション:
〜/ SVNのマージ - kdiff
#!/bin/bash
# Useful when something fails
LOG=~/svn-merge-kdiff-last-run.log
echo "arguments passed to $0: [email protected]" > $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 [email protected]; 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
それをバインドするスクリプトを作成します。 〜/にあるsvnにsubversion/config
diff3-cmd = ~/svn-merge-kdiff
残念ながら、SVN 1.7.18で動作しません – villapx
- 1. AndroidスタジオのマージツールとしてkDiff3を設定する方法
- 2. Windows10でGitKrakenのマージツールを設定する
- 3. TortoiseGit、ファイルごとに自動マージツールを設定します
- 4. SVNファイルとEclipseのcharsetエンコーディングプロパティを設定する方法
- 5. CruiseControl.NETを設定してSVNコミットごとにビルドを実行する方法
- 6. Tortoise SVNのコメント長の設定方法
- 7. MonoDevelopとVisual SVNサーバーを使用してSVNコマンドを実行する方法
- 8. TFSのマージツールとしてのGVim
- 9. MSBuildコミュニティタスクライブラリを使用して.NET DLLのSVNバージョン番号を正しく設定する方法
- 10. svnリポジトリパスをサーバパスに設定する方法は?
- 11. SVNでアクセスコントロールを設定する方法は?
- 12. Subversionをsvn + https://プロトコルで設定する方法は?
- 13. meldでsvn競合解消を設定する方法は?
- 14. Javaの設定を使用して春にワッフルを設定する方法
- 15. EPPlusを使用してワークシートのページレイアウトブレークを設定する方法
- 16. xlwtを使用してテキストの色を設定する方法
- 17. ウェーブメーカーを使用してセンターレイアウトのページを設定する方法
- 18. TortoiseSVNでKDiff3を使用してマージを保存する
- 19. "実行"属性をファイルに設定し、WindowsのSVNでチェックする方法は?
- 20. XCode 4.0を使用してリモートマシンにSVNリポジトリを設定
- 21. .htaccessを設定してURLにshebangを設定する方法
- 22. クラスをtomcatとデーモンとして設定する方法は?
- 23. SVN-Apache用の読み取り専用ユーザーを設定する
- 24. jQGridとjqueryタブを使用してグリッドの数を設定する方法
- 25. ini_setを使用してsmtpのユーザ名とパスワードを設定する方法
- 26. Paperclipを使用してプログラムでファイルアップロードを設定する方法
- 27. WPFでコンバータを使用してSystemColors.HighlightBrushKeyを設定する方法
- 28. ScrollableControlをAutoScrollをfalseに設定して使用する方法
- 29. .INF設定ファイルを使用してOCXをロードする方法
- 30. アラームクロッククラスを使用してアラームを設定する方法
私はそれを試してみて、どのように動作するかを見てみましょう。 – gruszczy
スペースを含むファイル名でも動作させるには、 'kdiff3" $ 1 "" $ 2 "" $ 3 "-o" $ 4 "'を使用します。 – hlovdal
私にとってはkdiff3 okですが、うまくいかないようです。私はsvnのマージを行います。競合が起きると "launch(l)"してkdiff3を開きますが、マージは機能していないようです。それは.svn/tmpに保存されますが、svn mergeコマンドは何をすべきかを私に再度尋ねるだけです。 編集:OK、悪いです。私は動作しますが、最初に(l)起動し、マージしてから、(r)を選択する必要があります。 – PapaFreud