1. ホーム
  2. git

[解決済み] git diff の出力を自分の好みの diff ツール/ビューアで表示するにはどうすればよいですか?

2022-03-22 13:05:46

質問

と入力すると git diff 私は、ビジュアルな差分ツール (Windows の SourceGear "diffmerge") で出力を表示したいのです。これを行うには、どのようにgitを設定すればよいのでしょうか?

解決方法は?

Git1.6.3 以降では、Git1.6.2 のように git difftool スクリプト : 参照 以下は私の回答です。 .


もしかして、これ 記事 は、あなたのお役に立つことでしょう。以下は、その良いところです。

外部差分ツールの指定方法は2種類あります。

1つ目は、あなたが使用した方法で、GIT_EXTERNAL_DIFF変数を設定する方法です。しかし、この変数は実行ファイルのフルパスを指しているはずです。さらに、GIT_EXTERNAL_DIFF で指定した実行ファイルは、固定された 7 つの引数セットで呼び出されます。

path old-file old-hex old-mode new-file new-hex new-mode

ほとんどの diff ツールでは引数の順序が (一部だけ) 異なるため、代わりにラッパースクリプトを指定し、それが本当の diff ツールを呼び出すことになるでしょう。

2つ目の方法は、私が好む方法です。 外部の diff ツールを設定するには、"git config" . 以下は、私が行ったことです。

1) ラッパースクリプト "git-diff-wrapper.sh" を作成し、以下のような内容を記述します。

-->8-(snip)--
#!/bin/sh

# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode

"<path_to_diff_executable>" "$2" "$5" | cat
--8<-(snap)--

このように、第2引数("old-file")と第5引数("new-file")のみを使用します。 diffツールに渡します。

2)タイプ

$ git config --global diff.external <path_to_wrapper_script>

へのパスで置き換えることで、~/.gitconfig には以下の内容が含まれるようになります。

-->8-(snip)--
[diff]
    external = <path_to_wrapper_script>
--8<-(snap)--

ラッパースクリプトと diff のパスは、必ず正しい構文で指定してください。 ツール、すなわちバックスラッシュの代わりにフォワードスラッシュを使用します。私の場合は

[diff]
    external = \"c:/Documents and Settings/sschuber/git-diff-wrapper.sh\"

を .gitconfig に、そして

"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

をラッパーのスクリプトに追加します。末尾の "cat" に注意してください!

(おそらく、' | cat は、適切な、あるいは一貫したリターンステータスを返さない可能性のあるいくつかのプログラムのためにのみ必要です。もしあなたの diff ツールが明示的なリターンステータスを返すなら、末尾の cat はなくてもいいかもしれません)

( ディオミディス・スピネリス が追加されます。 コメント欄 :

cat コマンドは必須です。 diff(1) は、デフォルトでは、ファイルが異なる場合、エラーコードで終了します。
Git では、外部の diff プログラムがエラーコードとともに終了するのは、メモリ不足などの実際のエラーが発生した場合のみとします。
の出力をパイピングすることで git から cat の場合、0 以外のエラーコードはマスクされます。
より効率的に、プログラムは単に exit で、引数は0)。


それ(上に引用した記事)は、外部ツールのための理論です コンフィグファイルで定義 (環境変数ではなく)。
実際には(やはり外部ツールの設定ファイルの定義について)、以下を参考にするとよいでしょう。