我正在尝试使用git的新(从git 1.7.11开始)目录diff命令和Beyond Compare 3作为difftool,但是没有创建临时文件。
例如:
git difftool --dir-diff <branch1> <branch2>
Beyond Compare打开与正确目录和列出的已更改文件的目录比较。
但是,当我点击任何文件时,我收到以下错误:
Unable to load C:\Users\<username>\AppData\Local\Temp\git-difftool.yG8V5\left\<path to some file>: The system cannot find the path specified
因此,我检查C:\Users\<username>\AppData\Local\Temp\git-difftool.yG8V5
目录是否存在而不存在。
超越比较3作为非目录差异和合并的difftool工作正常。
我正在使用git for Windows(msysgit)1.8.0。
以下是相关的.gitconfig设置:
# External Visual Diff/Merge Tool
[diff]
tool = bc3
[difftool "bc3"]
path = "C:/Program Files (x86)/Beyond Compare 3/BComp.exe"
[merge]
tool = bc3
[mergetool "bc3"]
keepTemporaries = false
trustExitCode = true
keepBackup = false
path = "C:/Program Files (x86)/Beyond Compare 3/BComp.exe"
答案 0 :(得分:28)
有一个解决方案here。基本上,如果您修改.gitconfig以使用BCompare.exe
而不是BComp.exe
,则控制台会话将保持打开状态,直到Beyond Compare窗口关闭。
将.gitconfig设置修改为:
# External Visual Diff/Merge Tool
[diff]
tool = bc3
[difftool "bc3"]
path = "C:/Program Files (x86)/Beyond Compare 3/BCompare.exe"
答案 1 :(得分:5)
Scott Wegner的回答有一个小缺点 - 如果你试图同时运行2比较,第二个将无效。这是因为BCompare.exe没有运行第二个应用程序实例,因此,过早关闭启动过程。
可悲的是,BCompare.exe无法理解/solo
命令行选项,因此我在Beyond Compare 3安装目录中编写了小型bat文件:
C:\ Program Files(x86)\ Beyond Compare 3 \ BCompD.bat
start /wait "" "%~dp0/bcomp.exe" %* /solo
并将其用作工具
[difftool "bc3dir"]
path = C:/Program Files (x86)/Beyond Compare 3/bcompd.bat
cmd = \"C:/Program Files (x86)/Beyond Compare 3/bcompd.bat\" \"$LOCAL\" \"$REMOTE\"
我不使用它作为默认的diff tol,所以我将其命名为bc3dir
并使用如下:
git difftool --dir-diff --tool=bc3dir 760be6d47d35b42a6a2409636b40a5521361e72f^ 760be6d47d35b42a6a2409636b40a5521361e72f
答案 2 :(得分:3)
请注意,您还有另一种情况,git difftool --dir-diff
可能行为不端。
“git difftool --dir-diff
”从开始时有一个小的回归
一个子目录,已经使用Git 2.12(2017年第一季度)修复。
commit 853e10c见David Aguilar (davvid
)(2016年12月7日)
(Junio C Hamano -- gitster
--合并于commit afe0e2a,2016年12月19日)
中修复
difftool
:在子目录dir-diff
索引创建9ec26e7 (
difftool
: fix argument handling in subdirs, 2016-07-18, Git 2.9.3)更正了路径参数在子目录中的处理方式,但是 它引入了对dir-diff
处理子目录外部条目的回归。准备差异的右侧时,我们只在临时区域中包含已更改的路径 diff的左侧是由一组临时索引构成的,该索引是从同一组更改的文件构建的,但它是在子目录中构建的。
这是一个问题,因为索引路径是相对的,并且 因此他们没有被添加到索引中。之前将
difftool
教导到chdir
到存储库的顶层 准备临时索引 这可确保所有顶层相对路径都有效。
答案 3 :(得分:3)
我尝试了@ScottWegner的答案,但是它仅在Beyond Compare还没有运行时才起作用。我借助@SergeyAzarkevich的答案找到了解决方案。这就是我在.gitconfig
[diff]
tool = bc3
[difftool]
prompt = false
[difftool "bc3"]
cmd = \"c:/program files (x86)/beyond compare 3/bcompare.exe\" -solo \"$LOCAL\" \"$REMOTE\"
请注意-solo
。这将导致“超越比较”产生该程序的新实例。
在Windows上,我们应该使用/solo
选项,但是由于git difftool
命令产生了sh.exe
来处理其命令行,因此/solo
选项无法正确使用解释为一条路径。所以我必须将其用作-solo
使用此选项,我运行start git difftool --dir-diff
,因此这将释放命令提示符,并且新的提示符将继续等待Beyond Compare的新实例退出。这还将确保git
创建的临时文件/文件夹将继续存在,直到差异工具退出。