AraxisをMSYS gitのdiff / mergeツールとして設定するには?
質問
Araxis Merge をMSYSGitの差分/マージツールとして使用しようとしています。
ネット上でいくつかのリソースを見つけました:
- Araxisサイトでは、「簡単」と書かれています。方法ですが、それは私のディストリビューションの一部ではない実行可能ファイル(araxisgitdiff.exeおよびaraxisgitmerge.exe)を意味します。
- にも情報が見つかりました。 gitguru ですが、実際の情報は次のとおりです。Araxisはせいぜいまばらであり、それから何も作成できませんでした。
- 最後に、古い stackoverflow post が、提案された方法は私には機能しません。その特定の情報はOS Xに向けられていました。私は「翻訳」しました。できる限りWindowsに接続しましたが、成功しませんでした:
/bin/git-diff-driver.sh
を作成しました
#!/bin/sh
"/c/Program Files/Araxis/Araxis Merge/compare.exe" -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5"
および編集された gitconfig
[merge]
tool = araxismerge
[mergetool "araxismerge"]
cmd = "/c/Program Files/Araxis/Araxis Merge/compare.exe" -3 -merge -wait $LOCAL $BASE $REMOTE $MERGED
[diff]
external = "/bin/git-diff-driver.sh"
そして私が得る唯一の結果は:
$ git diff HEAD ^ HEAD
外部差分が消滅し、PowerEditor / src / Notepad_plus.cppで停止しました。
編集:
また、回答の1つで示唆されているように、" c:/ Program Files / Araxis / Araxis Merge / compare.exe"
という名前のexeを試しましたが、同じ結果が得られました。
編集:
TortoiseGitを使用すると簡単に設定できることがわかりましたが、diffを単独で処理するようで、TortoiseGitの設定は、diffがコマンドライン。
編集:
では、質問は次のとおりです。AraxisMergeを使用して、MSYSGitとの差分やマージを成功させる人はいますか?
解決
「git diff」で常にaraxisを使用する場合は、ヘルプファイルの指示を使用できますが、コマンドラインおよび「git difftool」から通常どおり「git diff」を使用するように制御する場合'Araxis GUIを使用します。
git configに以下を追加してみてください::
[difftool "araxis"]
path = "/c/Program Files/Araxis/Araxis Merge/compare.exe"
renames = true
trustExitCode = true
[diff]
tool = araxis
stat = true
[mergetool "araxismergetool"]
cmd = 'C:\\Program Files\\Araxis\\Araxis Merge\\araxisgitmerge.exe' "$REMOTE" "$BASE" "$PWD/$LOCAL" "$PWD/$MERGED"
trustExitCode = false
[mergetool]
keepBackup = false
[merge]
tool = araxismergetool
stat = true
他のヒント
araxisのドキュメントが更新されました: http: //www.araxis.com/merge/documentation-windows/integrating-with-other-applications#Git
変更なしで、そこに示されている構成を使用できます。
その通りです。AraxisMerge 2009 v2009.3713の評価ライセンスを使用して、DOSまたはGit Bashの下でmsysgitバージョン1.6.3.2.1299.gee46cで動作するようになりました。
アプローチは、新しい gitを使用することです。 difftool
および 単純な差分ではなく、git mergetool
。
最初に、これらの差分およびマージツール用のスクリプトをセットアップしましょう
C:\>git config --global diff.tool adifftool
C:\>git config --global diff.external git-difftool--helper
C:\>git config --global difftool.adifftool.cmd "difftool.sh \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
C:\>git config --global difftool.prompt false
注:
- diff.externalをGitスクリプト
git-difftool--helper
に設定することにより、「git diff
」と入力する場合でもdifftoolを使用します。 - diffcodeスクリプトに
$ MERGED
を渡すことを忘れないでください。これは、diffされるファイルの実際の名前を持つ唯一の変数です。$ LOCAL
および$ REMOTE
は一時的な名前です。
マージツールの場合、次のグローバル値を設定します。
C:\>git config --global merge.tool amergetool
C:\>git config --global mergetool.amergetool.cmd "mergetool.sh \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" \"$PWD/$MERGED\""
C:\>git config --global mergetool.prompt false
これらのツールをいくつかのシェルスクリプトに設定すると、それらのスクリプト内からツールを切り替えることができます。
別のアプローチは、ツールに名前を付け( mergetool.araxis.cmd
、 mergetool.winmerge.cmd
、...)、 diffで適切なツールを指定することです。 .tool
または merge.tool
設定。
グローバル環境変数 PATH
によって参照されるディレクトリに difftool.sh
および mergetool.sh
を作成します。 DOSからでも動作します( sh
-shell-scripts)
difftool.sh
#!/bin/sh
echo Launching Araxis Merge.exe: $3
t1="'$3 (from)'"
t2="'(to)'"
"C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -nowait -2 -title1:${t1} -title2:${t2} "$1" "$2"
注:
-
-title1:" someTitle With Space"を使用することはできません ...スペースなしのタイトルのみが機能します...ので、今のところ、 'なしで試してくださいtitleN
'オプション。
とった!タイトル値を直接-title
オプションに渡すことはできません。" 'を使用して、ローカル変数に設定する必要があります。 '"
の引用符の組み合わせ(シェルスクリプトの実行中に二重引用符が消え、単純な引用符が残るため、タイトル内にスペースを入れることができます!) -
$ 3
は実際の名前を表し、diff用の一時ファイル名ではありません。したがって、title1
オプション内で$ 3
を使用し、スペースを空けます。 -
git diff HEAD ^ HEAD
はDOSセッションでは機能しません:git diff" HEAD ^"のみHEAD
になります。
mergetool.sh
#!/bin/sh
# Passing the following parameters to mergetool:
# local base remote merge_result
alocal=$1
base=$2
remote=$3
result=$4
t1="'$4 (current branch)'"
t2="'(common ancestor)'"
t3="'(to be merged)'"
if [ -f $base ]
then
"C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -wait -merge -3 -a2 -title1:${t1} -title2:${t2} -title3:${t3} "$alocal" "$base" "$remote" "$result"
else
"C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -wait -merge -3 -a2 -title1:${t1} -title2:${t2} -title3:${t3} "$alocal" "$result" "$remote" "$result"
fi
複数のファイル(複数のdiff、複数のファイルをマージする)が関係する場合、これらのスクリプトが適切に動作するかどうかわかりません。
ちょうどテストしました:動作し、Araxis compare.exeはファイルごとに1つのタブを開いて、差分またはマージします。
試してみてください;)
.gitconfigでのエスケープにはもう少し注意する必要があると思います。
残念ながら、config変数の展開と評価の方法のため、文字列は有効なシェルコマンドである必要があり、このコマンドは 'git config'エスケープされます。
次のようなものを試してください:
[mergetool "araxismerge"]
cmd = \"/c/Program Files/Araxis/Araxis Merge/compare.exe\" -3 -merge -wait \"$LOCAL\" \"$BASE\" \"$REMOTE\" \"$MERGED\"
はい、あまりきれいではありません。これは、 git config
を直接使用する方が実際に簡単な場合の1つです。
git config --global mergetool.araxismerge.cmd '"/c/Program Files/Araxis/Araxis Merge/compare.exe" -3 -merge -wait "$LOCAL" "$BASE" "$REMOTE" "$MERGED"'
私はこの問題にかなり長い間苦労していましたが、今や最終的に言えるのは、(中間シェルスクリプトのような)汚いハッキングがすべて不要な= Dであるということです。つまり、MSYSGitのすべての最新バージョン(1.6.4があります)は、すぐにAraxis Merge(2008があります)をサポートしています。内部的に「araxis」と呼ばれていることは驚くことではありません。したがって、必要なのは設定することです
[merge]
tool = araxis
.gitconfig
の。また、AraxisフォルダーをPATH環境変数に含める必要があります(MSYSGitは Compare.exe
を探します)。
適切な測定のために、「araxis」に関連する他のGit設定構成できたmergetool(特に、このページの一部のユーザーのように、その名前を正確に選択した場合)は、すべて削除する必要があります。これには、 [mergetool" araxis"]
セクションの下にあるすべてのものが含まれます。必ずすべての構成(システム、グローバル、およびリポジトリ)から削除してください。削除しないと、通常の「内部ツール」に干渉する可能性があります。動作。
いずれにせよ、MSYSGitがAraxis Mergeを開始する方法に興味がある場合、または他にどのようなmergetoolsがサポートされているのか疑問に思っている場合、探す場所は \ share \ git-gui \ lib \ですMSYSGitインストールフォルダーのmergetool.tcl
スクリプト。
PS。 .gitconfig
で mergetool.araxis.path
を設定することにより、PATH環境変数の設定を回避できる場合があります。個人的に、私はそうすることを決して気にしませんでした、
- とにかくコマンドラインからAraxis Mergeを使用しています。
-
.gitconfig
でディレクトリパスを指定すると(特に" C:\ Program Files \ Araxis \ Araxis Merge \"
のように、スペースが含まれます)バックスラッシュ/フォワードスラッシュの問題が発生しやすく、MSYSGitを悩ますため、正しく実行するのは困難です。
PPS。上記のすべては、Araxisをdifftoolにする場合にも当てはまります。つまり、追加する必要があります
[diff]
tool = araxis
および [difftool" araxis"]
セクションのその他のものを削除します(構成に含まれている場合)(ただし、PATHの設定を忘れないでください)。
に記載されているスクリプトに従うことを試みることができますdiffMergeについての私の答え(Windowsの場合)と動作するかどうかを確認します。
実行可能パスは次のように表現できます:
#!/bin/sh
"C:/Program Files/Araxis/Araxis Merge/compare.exe" -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5"
「簡単に」できるようになった1つの方法 TortoiseGit をインストールし、TortoiseGitオプションでdiff / mergeツールを設定します。
ただし、コマンドラインから差分を取りたい場合は、この問題に対処しません。
カスタマイズされたgitの異なる/合併にかまれたので、これを一度だけ修正しようと思った。 AraxisMergeが開始されましたが、タブのタイトルはありませんでした。したがって、それは読者のための演習として残されます:)
観察とコメント:
- 私はAraxisMergeを持っていなかったので、それをダウンロードし、試用できる30日間の無料評価ライセンスを取得しました。このバージョン(7.0と思われます)にはaraxisgitdiff.exeが付属しており、送信する指示のリンクが機能します。オプション#1:araxis mergeをアップグレードします。
- 私はCMD.EXEから作業しているため、「git diff HEAD HEAD ^」は機能しません。 「^」は「git diff HEAD" HEAD ^"」にエスケープする必要があります。
- 私自身の仕事のために、私はkdiff3をWindowsの無料の代替品として使用しています。
git-diff-driver.shで開始すると、同じエラーが発生しました。 「echo」のみを含むようにスクリプトを変更した後、これは変更されませんでした。そのため、エラーはスクリプトの内容とは無関係です。
その後、.gitconfigから「/ bin」部分を削除したため、行は
になりますexternal = "git-diff-driver.sh"
...これは機能し始めました:合併を開始しましたが、 '(repo)'部分を正しくエスケープしません。回避策として、タイトルなしで動作させました:
#!/bin/sh
"/c/Program Files/Araxis/Araxis Merge/compare.exe" -max "$2" "$5"
がんばって!