214

「git diff」と入力すると、「diff -y」のように横に並べて表示したい、または「kdiff3」のようなインタラクティブな diff ツールで表示したい。これはどのように行うことができますか?

4

17 に答える 17

222

git difftool を試す

git difftoolの代わりに使用しgit diffます。あなたは決して戻らないでしょう。

使用例を追加する更新:

について話している別のスタックオーバーフローへのリンクは次のgit difftoolとおり です。優先する差分ツール/ビューアで「git diff」出力を表示するにはどうすればよいですか

の新しいバージョンでgitは、difftoolコマンドは多くの外部差分ツールをそのままサポートします。たとえば、vimdiffauto がサポートされており、コマンド ラインから次のように開くことができます。

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
于 2011-10-06T03:11:26.197 に答える
98

Git には diff の内部実装がありますが、代わりに外部ツールをセットアップできます。

外部差分ツールを指定するには、次の 2 つの方法があります。

  1. GIT_EXTERNAL_DIFFおよびGIT_DIFF_OPTS環境変数を設定します。
  2. 経由で外部差分ツールを構成するgit config

ymattwの答えもかなりきちんとしています。ydiff

以下も参照してください。

を実行する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 ファイルを編集することを好みます)

  1. を使用してGIT_EXTERNAL_DIFFGIT_DIFF_OPTS

    たとえば、.bashrc または .bash_profile ファイルで次のように設定できます。

     GIT_EXTERNAL_DIFF=$HOME/scripts/my_diff.sh
     export GIT_EXTERNAL_DIFF
    
  2. 使用するgit config

    「git config」を使用して、ラッパー スクリプトが見つかる場所を定義します。

     git config --global diff.external ~/scripts/my_diff.sh
    
  3. ~/.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

于 2011-10-06T03:14:03.527 に答える
56

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 でテスト済み。

于 2013-02-01T15:14:40.247 に答える
28

次のように並べ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
于 2016-08-30T10:57:45.783 に答える
9

GitHub を使用せずにブラウザで差分を並べて表示したい場合は、git webdiffをお楽しみgit diffください。

$ pip install webdiff
$ git webdiff

これにより、従来の GUI difftools よりも多くの利点tkdiffが得られます。たとえば、構文の強調表示や画像の diff の表示が可能です。

詳しくはこちらをご覧ください。

于 2014-11-20T20:43:46.407 に答える
9
export GIT_EXTERNAL_DIFF='meld $2 $5; echo >/dev/null'

次に簡単に:

git diff
于 2012-10-12T08:22:28.893 に答える
7

colordiffを使用します。

Mac OS X では、次のようにインストールします。

$ sudo port install colordiff

apt get install colordiffLinuxでは、ディストリビューションに応じて、おそらくまたはそのようなものです。

それで:

$ git difftool --extcmd="colordiff -ydw" HEAD^ HEAD

またはエイリアスを作成する

$ git alias diffy "difftool --extcmd=\"colordiff -ydw\""

その後、あなたはそれを使用することができます

$ git diffy HEAD^ HEAD

diff -yUNIX のサイド バイ サイド diff であるため、「diffy」と呼びました。Colordiff は、より良い色も追加します。オプション-ydwでは、yは横並び、wは空白を無視し、dは最小限の差分を生成します (通常、差分としてより良い結果が得られます)。

于 2014-07-17T14:05:22.333 に答える
6

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

于 2015-10-29T13:45:02.727 に答える
2

これがアプローチです。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 "$@"
}
于 2016-06-27T09:14:11.593 に答える