git difftool运行git diff

6

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

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

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

也许你需要传递 webstorm 的绝对路径? - user456814
WebStorm文件夹在PATH中。 - baldmark
我知道它已经在你的路径中了,但是你尝试使用绝对路径了吗? - user456814
我现在已经加入了一个路径到[difftool "webstorm"]部分。我还重命名了该部分,以防我遇到与http://comments.gmane.org/gmane.comp.version-control.msysgit/13188相同的问题,但仍然没有任何作用(除了直接从命令行运行它)。 - baldmark
同样的问题在这里。我的配置文件设置为使用meld,它在我的路径中。当我运行:git difftool时,git运行“diff”。我添加了一个部分到我的配置文件中,如下所示(指定meld的完整路径,但没有帮助)。这个配置片段在我的全局配置文件($HOME/.gitconfig)和我的项目特定配置文件中是相同的。
[difftool "meld"]
path = /usr/bin/meld [diff] tool = meld
- rogodeter
2个回答

4
运行:
GIT_TRACE=1 git difftool --tool-help

为了打印与--tool一起使用但不可用的diff工具列表,请执行以下操作:


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

[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工具以指定使用哪个工具。可以通过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.

0

我刚遇到了同样的问题。我的git difftool配置已经在我的~/.gitconfig中设置好,并且一直正常工作,但今天奇怪的是,在一个仓库中git difftool可以正常运行,而在另一个仓库中却运行了git diff

解决方法:我将git从2.11.0更新到git 2.11.1,问题似乎已经消失了。

git 2.11.1 release notes提到修复了与difftool相关的回归问题。虽然描述的问题不是我所看到的,但也许这个修复已经解决了它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接