我尝试将webstorm
配置为外部差异工具。 Webstorm接受两个参数,这两个参数应该是可比文件的路径,所以如果我运行以下内容:
webstorm diff E/repo/file1.txt E/repo/file2.txt
一切正常。现在我尝试将配置放入config:
[diff]
external = webstorm diff $LOCAL $REMOTE
我试图回复$LOCAL
和$REMOTE
参数并且它们似乎包含由git创建的临时文件的完整路径,因此一切都应该正常工作,但是当我运行时
git diff master feature
webstorm正在启动,但后来我收到以下消息external diff died, stopping at file.txt.
我做错了什么?
我还发现了其他几种解决方案: the first one建议如下:
diff $(cd $(dirname $LOCAL) && pwd)/$(basename $LOCAL) $(cd $(dirname $REMOTE) && pwd)/$(basename $REMOTE)
但我得到以下输出:
dirname: too few arguments
Try `dirname --help' for more information.
basename: too few arguments
Try `basename --help' for more information.
dirname: too few arguments
Try `dirname --help' for more information.
basename: too few arguments
Try `basename --help' for more information.
webstorm也会在没有比较的情况下退出。这个配置尝试做什么?
$(cd $(dirname $LOCAL) && pwd)/$(basename $LOCAL)
下一个解决方案来自git manual: 它建议我创建包装脚本:
diff包装器检查以确保提供七个参数 将其中两个传递给您的合并脚本。默认情况下,Git通过了 以下是diff程序的参数:
path old-file old-hex old-mode new-file new-hex new-mode
因为您只需要旧文件和新文件参数,所以使用包装器 脚本传递你需要的脚本。
$ cat /usr/local/bin/extDiff
#!/bin/sh
[ $# -eq 7 ] && /usr/local/bin/extMerge "$2" "$5"
我还没有对这个进行过测试,但我会理解为什么之前的两个不起作用。
答案 0 :(得分:2)
在原始问题中回答我自己的问题:
我尝试将配置放入配置中......但它失败了:
[diff]
external = webstorm diff $LOCAL $REMOTE
diff.external
仅接受要启动的程序名称。它启动了这个程序并传递了7个参数。 $LOCAL
配置设置的上下文中没有$REMOTE
或diff.external
个变量。这就是它失败的原因。
下一个解决方案来自git手册:它建议我创建 包装脚本
由于diff.external
不仅仅接受程序名称,因此我们需要找到一种方法来过滤掉这7个参数,并且只需要两个webstorm所需的参数。这就是为什么我们需要这个包装脚本来过滤掉这些参数并只用两个启动webstorm。
所以我现在使用的配置是:
[diff]
tool = webstorm
[difftool]
prompt = false
[difftool "webstorm"]
cmd = webstorm diff $PWD/$REMOTE $LOCAL
trustExitCode = false
difftool
块中的 cmd
指定从命令行执行git difftool -t "webstorm"
时要运行的命令。所以它会运行webstorm diff $PWD/$REMOTE $LOCAL
。请注意,$REMOTE
和$LOCAL
变量可用于difftool.cmd
块内。在我的情况下,$REMOTE
变量保存相对于当前目录的文件路径,即只是file1.txt
,而$LOCAL
具有完整路径,即E:/temp/file1.txt
(由$PWD
创建的临时文件git进行比较)。由于webstorm需要完整路径,因此我添加$REMOTE
变量,该变量具有当前目录的路径并将其与$PWD/$REMOTE
合并。我得到完整路径:E:/myrepo/file.txt
- -t
。最后,我使用gitdiff
上面的git
选项明确指定要使用的diff工具的配置。如果您希望difftool
使用某些默认diff.tool
配置,请在{{1}}配置变量中指定它(在我的情况下它是如何完成的)。
答案 1 :(得分:0)
在配置中,您编写了diff这个词,它似乎是多余的。请尝试改为:
external = webstorm $LOCAL $GLOBAL