質問

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環境変数の設定を回避できる場合があります。個人的に、私はそうすることを決して気にしませんでした、

  1. とにかくコマンドラインからAraxis Mergeを使用しています。
  2. .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"

がんばって!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top