git difftool运行git diff

时间:2014-05-25 12:20:40

标签: git difftool

我显然在这里忽略了一些非常简单的东西,但我没有看到它。命令

webstorm diff ~/test.txt ~/test2.txt

运行JetBrains图形差异工具。我正在运行git 1.8.3.2并且有一个包含

的git .config
[diff]
    tool = webstorm
[difftool "webstorm"]
    cmd = webstorm diff $(cd $(dirname "$LOCAL") && pwd)/$(basename "$LOCAL") $(cd $(dirname "$REMOTE") && pwd)/$(basename "$REMOTE")
[difftool]
    prompt = false

当我运行命令

git difftool ~/test.txt ~/test2.txt

我在终端窗口中收到以下内容:

diff --git a/home/mark/test.txt b/home/mark/test2.txt
index 7379ce2..6ce16f1 100644
--- a/home/mark/test.txt
+++ b/home/mark/test2.txt
@@ -1,2 +1,2 @@
-blah
+bluergh

我做错了什么/不做什么?

2 个答案:

答案 0 :(得分:2)

执行命令

GIT_TRACE=1 git difftool --tool-help

打印可能与--tool一起使用但不可用的差异工具列表。

其次,我相信以下简化示例可能会更好:

[difftool "webstorm"]
  cmd = webstorm diff "$LOCAL" "$REMOTE"

或者通过指定二进制文件或脚本的路径,例如

[difftool]
  prompt = NO
  external = /usr/local/bin/diffmerge

通过以下方式检查diff配置:

git config --get-regex diff

或更具体地说(用您的工具名称替换webstorm):

git config --get difftool.webstorm.cmd

如果仍然无法正常工作,请在新存储库中对其进行测试,例如:按照以下命令:

mkdir ~/git_test && cd ~/git_test
git init && touch file && git add file && git commit -m'Adds file' -a
echo changed >> file
GIT_TRACE=1 git difftool

如果以上工作正常,请确保您的存储库配置没有任何意外情况,例如

more "$(git rev-parse --show-toplevel)"/.git/config

如果您处于合并状态(请git status检查),则需要使用mergetool,例如

git mergetool

添加-t tool以指定哪个工具。列表由git mergetool --tool-help提供。

另见man git-difftool

CONFIG VARIABLES
       git difftool falls back to git mergetool config variables when the difftool equivalents have not been
       defined.

       diff.tool
           The default diff tool to use.

       diff.guitool
           The default diff tool to use when --gui is specified.

       difftool.<tool>.path
           Override the path for the given tool. This is useful in case your tool is not in the PATH.

       difftool.<tool>.cmd
           Specify the command to invoke the specified diff tool.

           See the --tool=<tool> option above for more details.

       difftool.prompt
           Prompt before each invocation of the diff tool.

答案 1 :(得分:0)

我遇到了同样的问题。我的git diftool配置已在我的~/.gitconfig中设置并且一直运行良好,但今天很奇怪git difftool在一个仓库中工作但在另一个仓库中运行git diff

修复:我从git 2.11.0更新到git 2.11.1,问题似乎已经消失了。

git 2.11.1 release notes提到修复与difftool相关的回归。所描述的问题不是我所看到的,但也许修复程序无论如何都要修复它。