在我的存储库中,如果我输入
$ git diff some-file
或
$ git difftool some-file
我得到了终端差异显示。我认为这不应该发生,因为我已经设置了一个外部差异工具,如git config -l
的输出所示:
$ 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
调用融合?
如果我进行设置以使git config -l
具有以下行,我会得到相同的行为:
diff.tool = meld
或
diff.external = usr/bin/meld
注意:我的计算机上的其他存储库没有此问题。
相关但不等同的SO问题:
答案 0 :(得分:16)
我得到了终端差异显示。我不应该这样,因为我已经设置了一个外部差异工具
是的,它应该:diff.external 用于&#34;终端内差异显示&#34;。
diff.external
如果设置了此配置变量,则不使用内部diff机器执行 diff生成,而是使用给定的命令。 可以使用
GIT_EXTERNAL_DIFF
环境变量覆盖 使用&#34; git Diffs&#34;中描述的参数调用该命令。在git(1)中。注意:如果您只想在文件的子集上使用外部差异程序,则可能需要使用gitattributes(5)。
question you link解释了为什么meld
无法发挥&#34;外部差异&#34;的作用。
Viewing a diff visually with another tool完成了:
git difftool --dir-diff shaOfHisCheckIn^!
git difftool --tool=meld --dir-diff shaOfHisCheckIn^!
git difftool -t meld -d shaOfHisCheckIn^!
meld
可以在Windows上配置为difftool:请参阅&#34; Git Diff and Meld on Windows&#34;。
如果你想为git diff配置meld,你可以(on Ubuntu) use the diff.external
, but with a wrapper script:
使用以下内容创建名为
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实例。
答案 1 :(得分:14)
似乎git diff
(至少,从git
版本1.7.12.4
开始)除了内部的,仅限控制台的差异外,不会运行“两者都修改了“状态。 git mergetool
可以处理此类文件。
答案 2 :(得分:2)
我通常只是想检查一下我要检查的更改是否正确。所以我按照建议的here程序(类似于VonC提到的程序)。但是,运行git difftool
仍然没有打开融合。然后我创建了一个别名:
alias git-diff='git difftool $(git rev-parse HEAD)'
将此保存在.bashrc或.zshrc或shell的相应配置中。这实质上是将分支的状态与分支上的先前提交进行比较。
执行git-diff
以查看每个文件的文件更改或git-diff --dir
以查看目录视图中的所有更改。