私のリポジトリで、入力した場合
$ git diff some-file
または
$ git difftool some-file
ターミナル内の差分表示を取得します。 git config -l
の出力に示されているように、外部diffツールを設定しているため、これは起こるべきではないと思います。
$ git config -l
user.name=blah blah
user.email=blah blah
http.sslverify=true
diff.external=/home/daniel/bin/git-diff <--This is the important line
Push.default=simple
core.filemode=false
core.editor=gedit
alias.tree=log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset) %C(auto)%d%C(reset)
%C(black)[%cr]%C(reset) %x09%C(black)%an: %s %C(reset)'
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
remote.Origin.url=https://daniel@skynet/git/pyle.git
remote.Origin.fetch=+refs/heads/*:refs/remotes/Origin/*
branch.master.remote=Origin
branch.master.merge=refs/heads/master
branch.daniel.remote=Origin
branch.daniel.merge=refs/heads/daniel
diff.external
行で参照されるgit-diffファイルは次のようになります
#!/bin/bash
meld $2 $5
git diff
がmeldを呼び出さないのはなぜですか?
git config -l
に次の行があるように設定すると、同じ動作になります。
diff.tool = meld
または
diff.external = usr/bin/meld
注:私のマシンの他のリポジトリにはこの問題はありません。
関連するが、同等ではないSOの質問:
ターミナル内の差分表示を取得します。私は外部diffツールを設定したので、これは起こるべきではありません
はい、そうすべきです:diff.externalis「in-terminal diff display」.
diff.external
この構成変数が設定されている場合、diffの生成は内部diff機構ではなく、指定されたコマンドを使用して実行されます。
GIT_EXTERNAL_DIFF
環境変数で上書きできます。
このコマンドは、git(1)の「git Diffs」で説明されているパラメーターを使用して呼び出されます。注:ファイルのサブセットでのみ外部diffプログラムを使用する場合は、代わりに gitattributes(5) を使用できます。
リンクする質問 は、meld
が「外部diff」の役割を果たせない理由を説明しています。
別のツールで差分を視覚的に表示する は次のようにして行います:
git difftool --dir-diff shaOfHisCheckIn^!
git difftool --tool=meld --dir-diff shaOfHisCheckIn^!
git difftool -t meld -d shaOfHisCheckIn^!
meld
は、Windowsでdifftoolとして設定できます。「 WindowsでのGit DiffとMeld 」を参照してください。
Git diff用にmeldを設定する場合は、 (Ubuntuでは)diff.external
を使用しますが、ラッパースクリプトを使用します :
次の内容を使用して、
git-diff.sh
というファイルを作成します。
#!/bin/bash
meld "$2" "$5" > /dev/null 2>&1
これを
/usr/local/bin
などの場所に保存し、実行権限を付与します。
$ Sudo mv git-diff.sh /usr/local/bin/
$ Sudo chmod +x /usr/local/bin/git-diff.sh
最後のステップは、
$HOME/.gitconfig
ファイルを開き、次の数行を追加することです。
[diff]
external = /usr/local/bin/git-diff.sh
次回Gitプロジェクトに変更を加えたgit diffを入力すると、Meldが起動し、分割ペインdiffビューアが表示されます。
次の差分ビューアを開く前に、開いているmeldインスタンスを閉じる必要があることに注意してください。
のようだ git diff
(少なくとも、git
バージョン1.7.12.4
) "both modified"状態のファイルに対して、内部のコンソールのみのdiff以外は実行しません。 git mergetool
はそのようなファイルでも動作します。
通常、チェックインしようとしている変更が正しいかどうかを確認したいだけです。そこで、提案された手順に従いました here (VonCが指摘したものと同様)。ただし、git difftool
まだメルドを開けていません。次に、エイリアスを作成しました。
alias git-diff='git difftool $(git rev-parse HEAD)'
これを.bashrcまたは.zshrcまたはシェルの対応する構成に保存します。これは本質的に、ブランチの状態をブランチ上の以前のコミットと比較します。
git-diff
ファイルごとにファイルごとの変更を表示するか、git-diff --dir
ディレクトリビューですべての変更を表示します。