[解決済み】"git diff "を実行したときに、サイドバイサイドのdiffを取得するにはどうすればよいですか?
質問
git diff" と入力したときに、"diff -y" のように横に並べて表示したり、"kdiff3" のように対話型の diff ツールで表示したりしたいのです。どうすればよいのでしょうか?
どのように解決するのですか?
Git には diff の内部実装がありますが、代わりに外部ツールをセットアップすることもできます。
外部の差分ツールを指定する方法は2種類あります。
-
を設定します。
GIT_EXTERNAL_DIFF
とGIT_DIFF_OPTS
環境変数を指定します。 -
外部差分ツールの設定
git config
ymattw
の答えも、かなりすっきりしています。
ydiff
こちらもご覧ください。
- https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
-
git diff --help
- http://www.pixelbeat.org/programming/diffs/
を行う場合
git diff
は、上記の環境変数の設定とその
.gitconfig
ファイルを作成します。
デフォルトでは、Gitは以下の7つの引数をdiffプログラムに渡します。
path old-file old-hex old-mode new-file new-hex new-mode
通常、old-fileとnew-fileの2つのパラメータだけが必要です。もちろん、ほとんどの diff ツールでは引数としてふたつのファイル名を受け取るだけです。つまり、小さなラッパー・スクリプトを書いて、Git がスクリプトに提供する引数を受け取り、あなたが選んだ外部の git プログラムに渡す必要があるのです。
例えば、ラッパー・スクリプトを
~/scripts/my_diff.sh
:
#!/bin/bash
# un-comment one diff tool you'd like to use
# side-by-side diff with custom options:
# /usr/bin/sdiff -w200 -l "$2" "$5"
# using kdiff3 as the side-by-side diff:
# /usr/bin/kdiff3 "$2" "$5"
# using Meld
/usr/bin/meld "$2" "$5"
# using VIM
# /usr/bin/vim -d "$2" "$5"
で、そのスクリプトを実行可能にする必要があります。
chmod a+x ~/scripts/my_diff.sh
の場合は、独自の diff ラッパースクリプトをどこでどのように見つけるかを Git に伝える必要があります。 その方法は三通りあります。(私は .gitconfig ファイルを編集するのが好きです)
-
使用方法
GIT_EXTERNAL_DIFF
,GIT_DIFF_OPTS
例えば、.bashrc や .bash_profile ファイルで設定することができます。
GIT_EXTERNAL_DIFF=$HOME/scripts/my_diff.sh export GIT_EXTERNAL_DIFF
-
使用方法
git config
git config" を使用して、ラッパーのスクリプトがどこにあるのかを定義します。
git config --global diff.external ~/scripts/my_diff.sh
-
を編集します。
~/.gitconfig
ファイルを編集することができます。
~/.gitconfig
ファイルに以下の行を追加してください。[diff] external = ~/scripts/my_diff.sh
注
カスタムの diff ツールをインストールするのと同様に、カスタムの merge-tool をインストールすることもできます。(progit.orgのページを参照してください)
ご覧ください。 http://fredpalma.com/518/visual-diff-and-merge-tool/ と https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートの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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】git revert <hash> not allowed due to a merge but no -m option was given.
-
[解決済み】gitが「変更をコミットするか、マージする前にstashしてください」と言うのを解決するには?
-
gitアップロードの共通エラー処理
-
[解決済み] fatal: EOF が早い fatal: インデックスパックが失敗した
-
[解決済み] Git pull - マージする前に移動または削除してください。
-
[解決済み] 現在の支店にはトラッキング情報がありません
-
[解決済み] git ls-remote と git ls-remote origin の違い。
-
[解決済み] GitBash | origin master - rejected (fetch first) | GitHub リポジトリにファイルがない。
-
[解決済み] git diff の出力を自分の好みの diff ツール/ビューアで表示するにはどうすればよいですか?
-
[解決済み] コマンドラインからdiffをカラー化する方法