14

MSYSGitの差分/マージツールとしてAraxisMergeを使用しようとしています。

ネット上でいくつかのリソースを見つけました:

  • Araxisサイトでは、「簡単な」方法について言及していますが、これは、私のディストリビューションの一部ではない実行可能ファイル(araxisgitdiff.exeおよびaraxisgitmerge.exe)を意味します。
  • gitguruにもいくつかの情報がありましたが、実際の情報はre:Araxisはせいぜいまばらで、それから何も作成できませんでした。
  • 最後に、古いstackoverflowの投稿に関する情報がいくつかありましたが、提案された方法は私には機能しません。その特定の情報はOSXを対象としていました。私は可能な限り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
外部diffが停止し、PowerEditor / src/Notepad_plus.cppで停止しました。


編集:

また、回答の1つで提案されているように名前が付けられたexeを試してみたところ"c:/Program Files/Araxis/Araxis Merge/compare.exe"、同じ結果が得られました。


編集:

TortoiseGitを使用すれば簡単に設定できることがわかりましたが、diffを単独で処理しているようで、コマンドラインからdiffを呼び出したときにAraxisをマージツールとして設定する方法を示すTortoiseGitの設定はありません。


編集:

したがって、問題は次のとおりです。AraxisMergeを使用してMSYSGitとの差分およびマージに成功した人はいますか?もしそうなら、どのようにそれを行いますか?

4

8 に答える 8

16

「git diff」で常に araxis を使用する場合は、ヘルプ ファイルの手順を使用できますが、「git diff」を通常のコマンド ラインから使用するように制御したい場合は、「git difftool」を使用してエンゲージします。 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
于 2009-09-15T22:11:04.110 に答える
6

araxis のドキュメントが更新されました: http://www.araxis.com/merge/documentation-windows/integrating-with-other-applications#Git

そこに示されている構成を変更せずに使用できます。

于 2010-12-03T10:34:13.853 に答える
5

そうです... msysgit バージョン 1.6.3.2.1299.gee46c、DOS または Git Bash、Araxis Merge 2009、v2009.3713 の評価ライセンスで動作しました。

アプローチは、単純な diff の代わりにnew git difftoolandを使用することです。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

ノート:

  • Git スクリプトgit-difftool--helperに diff.external を設定することで、「 」と入力しても difftool を使用するようになりますgit diff
  • $MERGEDdifftool スクリプトに渡すことを忘れないでください。これは、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

これらのツールを一部のシェル スクリプトに設定することで、それらのスクリプト内からツールを切り替えることができます。
もう 1 つの方法は、ツール ( mergetool.araxis.cmdmergetool.winmerge.cmd、...) に名前を付け、diff.toolまたはmerge.tool設定で適切なツールを指定することです。

グローバル環境変数によって参照されるディレクトリにdifftool.shとを作成します。それらは DOS からでも動作します (そしてそれらは-- シェル -- スクリプトです) 。mergetool.shPATHsh

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を使用して、ローカル変数に設定する必要があります"' '"(シェル スクリプトの実行中に二重引用符が消え、単純な引用符が残り、タイトル内にスペースが許可されます!)
  • $3diff目的の一時ファイル名ではなく、実際の名前を表します。したがって、オプション $3内でスペースを使用して を使用します。title1
  • git diff HEAD^ HEADDOS セッションでは動作しません: 動作するだけgit diff "HEAD^" HEADです。

マージツール.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

複数のファイルが関係している場合 (複数の差分、複数のファイルをマージする場合)、これらのスクリプトが適切に機能するかどうかはわかりません。
ちょうどテストしました: 動作し、Araxis compare.exe はファイルごとに 1 つのタブを開き、差分またはマージを行います。
試してみて、お知らせください ;)

于 2009-06-19T09:13:28.407 に答える
2

.gitconfig でのエスケープにはもう少し注意する必要があると思います。

残念ながら、構成変数が展開および評価される方法により、文字列は有効なシェル コマンドである必要があり、'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"'
于 2009-05-05T17:55:32.973 に答える
1

私はかなり長い間この問題に苦しんでいましたが、今では、提案されたすべてのダーティ ハック (中間シェル スクリプトなど) は不要であると最終的に言えます =D. つまり、MSYSGit の最新バージョン (私は 1.6.4 を持っています) はすべて、すぐに Araxis Merge (私は 2008 を持っています) をサポートしています。内部で「araxis」と呼ばれているのは当然のことです。したがって、必要なのは設定するだけです

[merge]
    tool = araxis

あなたの.gitconfig。また、Araxis フォルダーを PATH 環境変数に含める必要があります (MSYSGit は を探しますCompare.exe)。

適切な対策として、「araxis」mergetool に関連する他の Git 設定 (特に、このページの一部の人々が行ったように、正確にその名前を選択した場合) をすべて削除する必要があります。これには、セクションの下のすべてが含まれます[mergetool "araxis"]。すべての構成 (システム、グローバル、およびリポジトリ) からそれらを必ず削除してください。そうしないと、通常の「内部ツール」の動作に干渉する可能性があります。

いずれにせよ、MSYSGit が Araxis Merge を開始する方法に興味がある場合、またはすぐに使用できる他のマージツールを知りたい場合は\share\git-gui\lib\mergetool.tcl、MSYSGit インストール フォルダー内のスクリプトを参照してください。

PS。mergetool.araxis.pathで構成することにより、PATH 環境変数の設定を回避できる場合があります.gitconfig。個人的には、わざわざそうするつもりはありませんでした。

  1. とにかく、コマンド ラインから Araxis Merge を使用します。
  2. でディレクトリ パスを指定する.gitconfig(特に、"C:\Program Files\Araxis\Araxis Merge\"スペースを含む のようなもの) は、MSYSGit を悩ませるバックスラッシュ/フォワードスラッシュの問題が発生しやすいため、正しく実行するのが難しいことがわかります。

PPS。上記のすべては、Araxis を difftool にする場合にも当てはまります。つまり、追加する必要があります

[diff]
    tool = araxis

設定にある場合は、セクション内の他のものをすべて削除[difftool "araxis"]します(ただし、PATH を設定することを忘れないでください)。

于 2009-11-02T10:31:52.260 に答える
0

私がそれを「簡単に」行う方法の1つは、TortoiseGitをインストールし、TortoiseGitオプションで差分/マージツールを設定することです。
ただし、コマンドラインとの差分が必要な場合は、この問題に対処できません。

于 2009-05-05T21:34:21.870 に答える
0

diffMerge (Windows 用)に関する私の回答に記載されているスクリプトに従ってみて、それが機能するかどうかを確認してください。

実行可能パスは、次のように表現する方が適切です。

#!/bin/sh

"C:/Program Files/Araxis/Araxis Merge/compare.exe" -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5"
于 2009-05-05T15:53:44.640 に答える
0

私はカスタマイズされた git の相違点や合併に悩まされていたので、これを完全に修正しようと思いました。AraxisMerge が開始するところまで来ましたが、タブのタイトルはありません。したがって、それは読者の演習として残します:)

所見とコメント:

  • 私は AraxisMerge を持っていなかったので、ダウンロードして 30 日間無料の評価ライセンスを取得して試してみました。このバージョン (7.0 のようです) には araxisgitdiff.exe が付属しており、送信した指示へのリンクが機能します。それがオプション#1になります:araxisマージをアップグレードします。
  • 私はCMD.EXEから作業しているので、「git diff HEAD HEAD^」は機能しません。「^」は「git diff HEAD "HEAD^"」にエスケープする必要があります。
  • 私自身の仕事では、かなりうまく機能する Windows 上の無料の代替品として kdiff3 を使用しています (デフォルトで git によってサポートされていることが役立ちます)。

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"

幸運を!

于 2009-06-13T20:43:42.560 に答える