[解決済み] git diff の出力を自分の好みの diff ツール/ビューアで表示するにはどうすればよいですか?
質問
と入力すると
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)。
それ(上に引用した記事)は、外部ツールのための理論です
コンフィグファイルで定義
(環境変数ではなく)。
実際には(やはり外部ツールの設定ファイルの定義について)、以下を参考にするとよいでしょう。
- msysgit / gitk で DiffMerge を設定するにはどうすればよいですか? これは、MsysGit および gitk に対する DiffMerge および WinMerge の具体的な設定を説明するものです。
- Windows で Git を使うためのエディターを設定するには? は、外部エディタとしてのNotepad++の定義についてです。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 新しいローカルブランチをリモートの Git リポジトリにプッシュし、それを追跡するにはどうすればよいのでしょうか?
-
[解決済み] Git のリモートブランチを作成する方法を教えてください。
-
[解決済み] git に自分の好きなエディタを使わせてコミットするにはどうしたらいいですか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】Gitバージョン管理でファイルの変更履歴を見る
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] あなたのブランチは 'origin/master' より 3 コミット進んでいます。
-
gitコミット発生 ! [リモート拒否] master -> master (pre-receive hook declined) 解決策
-
[解決済み】Git Push Error: リポジトリデータベースにオブジェクトを追加する権限が不足しています。
-
[解決済み] 異なる2つのブランチのファイルを比較する方法
-
[解決済み] gitでプッシュしようとしているものを見るにはどうしたらいいですか?
-
[解決済み] Gitのビジュアルマージツールとして最適なものは?[クローズド]
-
[解決済み] Windows で Git を使用するためのエディタを設定するにはどうすればよいですか?
-
[解決済み] git を使って特定のファイルの変更点を見る
-
[解決済み】ブランチを指定せずにgit pushした場合のデフォルトの動作
-
[解決済み】"git diff "を実行したときに、サイドバイサイドのdiffを取得するにはどうすればよいですか?