「git diff」と入力すると、「diff -y」のように横に並べて表示したい、または「kdiff3」のようなインタラクティブな diff ツールで表示したい。これはどのように行うことができますか?
17 に答える
git difftool を試す
git difftool
の代わりに使用しgit diff
ます。あなたは決して戻らないでしょう。
使用例を追加する更新:
について話している別のスタックオーバーフローへのリンクは次のgit difftool
とおり です。優先する差分ツール/ビューアで「git diff」出力を表示するにはどうすればよいですか
の新しいバージョンでgit
は、difftool
コマンドは多くの外部差分ツールをそのままサポートします。たとえば、vimdiff
auto がサポートされており、コマンド ラインから次のように開くことができます。
cd /path/to/git/repo
git difftool --tool=vimdiff
サポートされているその他の外部差分ツールgit difftool --tool-help
は、出力例を次に示します。
'git difftool --tool=<tool>' may be set to one of the following:
araxis
kompare
vimdiff
vimdiff2
The following tools are valid, but not currently available:
bc3
codecompare
deltawalker
diffuse
ecmerge
emerge
gvimdiff
gvimdiff2
kdiff3
meld
opendiff
tkdiff
xxdiff
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
と、Git は上記の環境変数の設定とその.gitconfig
ファイルの両方をチェックします。
デフォルトでは、Git は次の 7 つの引数を diff プログラムに渡します。
path old-file old-hex old-mode new-file new-hex new-mode
通常、old-file パラメーターと new-file パラメーターのみが必要です。もちろん、ほとんどの diff ツールは引数として 2 つのファイル名しか取りません。これは、小さなラッパー スクリプトを作成する必要があることを意味します。このラッパー スクリプトは、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 に指示する必要があります。それを行う方法には 3 つの選択肢があります: (私は .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 ツールをインストールするのと同様に、カスタム マージ ツールをインストールすることもできます。これは、マージを視覚化するのに役立つ視覚的なマージ ツールになる可能性があります。(progit.org のページを参照)
参照: http://fredpalma.com/518/visual-diff-and-merge-tool/およびhttps://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
ydiff
以前は と呼ばれcdiff
ていたこのツールは、並べて、インクリメンタル、およびカラフルな差分を表示できます。
の代わりに、次のgit diff
ようにします。
ydiff -s -w0
これydiff
により、相違点のあるファイルごとに並べて表示モードで起動します。
インストール:
python3 -m pip install --user ydiff
-また-
brew install ydiff
の場合git log
、次を使用できます。
ydiff -ls -w0
-w0
端末の幅を自動検出します。詳細とデモについては、ydiff
GitHub リポジトリ ページを参照してください。
Git 2.18.0、ydiff 1.1 でテスト済み。
次のように並べdiff
て使用できます。sdiff
$ git difftool -y -x sdiff HEAD^ | less
whereHEAD^
は、比較したいものに置き換える必要がある例です。
他にもいくつかの提案がある場所で、このソリューションを見つけました。ただし、この1つの答えはOPの質問であり、簡潔かつ明確です。
引数の説明については、 man git-difftoolを参照してください。
コメントを基にgit sdiff
、次の実行可能スクリプトを記述して便利なコマンドを作成できます。
#!/bin/sh
git difftool -y -x "sdiff -w $(tput cols)" "${@}" | less
名前を付けて保存し/usr/bin/git-sdiff
ますchmod +x
。次に、これを行うことができます:
$ git sdiff HEAD^
追加のヒント
コメントで示唆されているように、色付きの出力でicdiff
行うことを行うために使用できます。sdiff
$ more /usr/bin/git-sdiff
#!/bin/sh
git difftool -y -x "icdiff --cols=$(tput cols)" "${@}" | less
GitHub を使用せずにブラウザで差分を並べて表示したい場合は、git webdiffをお楽しみgit diff
ください。
$ pip install webdiff
$ git webdiff
これにより、従来の GUI difftools よりも多くの利点tkdiff
が得られます。たとえば、構文の強調表示や画像の diff の表示が可能です。
詳しくはこちらをご覧ください。
export GIT_EXTERNAL_DIFF='meld $2 $5; echo >/dev/null'
次に簡単に:
git diff
colordiffを使用します。
Mac OS X では、次のようにインストールします。
$ sudo port install colordiff
apt get install colordiff
Linuxでは、ディストリビューションに応じて、おそらくまたはそのようなものです。
それで:
$ git difftool --extcmd="colordiff -ydw" HEAD^ HEAD
またはエイリアスを作成する
$ git alias diffy "difftool --extcmd=\"colordiff -ydw\""
その後、あなたはそれを使用することができます
$ git diffy HEAD^ HEAD
diff -y
UNIX のサイド バイ サイド diff であるため、「diffy」と呼びました。Colordiff は、より良い色も追加します。オプション-ydw
では、y
は横並び、w
は空白を無視し、d
は最小限の差分を生成します (通常、差分としてより良い結果が得られます)。
I personally really like icdiff !
If you're on Mac OS X
with HomeBrew
, just do brew install icdiff
.
To get the file labels correctly, plus other cool features, I have in my ~/.gitconfig
:
[pager]
difftool = true
[diff]
tool = icdiff
[difftool "icdiff"]
cmd = icdiff --head=5000 --highlight --line-numbers -L \"$BASE\" -L \"$REMOTE\" \"$LOCAL\" \"$REMOTE\"
And I use it like: git difftool
これがアプローチです。less をパイプすると、xterm の幅は 80 に設定されますが、これはそれほどホットではありません。ただし、たとえば COLS=210 でコマンドを続行すると、拡張された xterm を利用できます。
gitdiff()
{
local width=${COLS:-$(tput cols)}
GIT_EXTERNAL_DIFF="diff -yW$width \$2 \$5; echo >/dev/null" git diff "$@"
}