git difftool--dir diff没有创建供Beyond Compare 3使用的临时文件
我正在尝试使用git的新(从git 1.7.11开始)目录diff命令和Beyond Compare 3作为difftool,但是没有创建临时文件 例如:git difftool--dir diff没有创建供Beyond Compare 3使用的临时文件,git,msysgit,beyondcompare3,Git,Msysgit,Beyondcompare3,我正在尝试使用git的新(从git 1.7.11开始)目录diff命令和Beyond Compare 3作为difftool,但是没有创建临时文件 例如: git difftool--dir diff Beyond Compare将打开目录比较,其中列出了正确的目录和已更改的文件 但是,当我单击任何文件时,会出现以下错误: 无法加载C:\Users\\AppData\Local\Temp\git difftool.yG8V5\left\:系统找不到指定的路径 因此,我检查C:\Users\\Ap
git difftool--dir diff
Beyond Compare将打开目录比较,其中列出了正确的目录和已更改的文件
但是,当我单击任何文件时,会出现以下错误:
无法加载C:\Users\\AppData\Local\Temp\git difftool.yG8V5\left\:系统找不到指定的路径
因此,我检查C:\Users\\AppData\Local\Temp\git difftool.yG8V5
目录是否存在,是否不存在
Beyond Compare 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"
这里描述了一种解决方案。基本上,如果将.gitconfig修改为使用
BCompare.exe
而不是BComp.exe
,控制台会话将保持打开状态,直到关闭“超越比较”窗口
将.gitconfig设置修改为:
# External Visual Diff/Merge Tool
[diff]
tool = bc3
[difftool "bc3"]
path = "C:/Program Files (x86)/Beyond Compare 3/BCompare.exe"
请注意,还有另一种情况,
git difftool--dir diff
可能会出现错误行为
“git difftool--dir diff
”从
一个子目录,已通过Git 2.12(2017年第1季度)修复
参见(2016年12月7日)作者。(于2016年12月19日被合并)
difftool
:修复在子目录中创建索引的问题
更正了如何在子目录中处理路径参数,但是
它引入了一个回归,即dir diff
如何处理子目录之外的条目
准备差异右侧时,我们只在临时区域中包括更改的路径。diff的左侧是从一个临时索引构建的,该索引是从同一组已更改的文件构建的,但它是从子目录中构建的。
这是一个问题,因为索引路径是顶级相对路径,并且 因此,它们没有被添加到索引中 之前,将
difftool
教给chdir
到存储库的顶层
准备其临时索引。这将确保所有顶级相对路径都有效
Scott Wegner的答案是有一个小缺点-如果您尝试同时运行2个比较,第二个将不起作用。这是因为BCompare.exe不运行第二个应用程序实例,所以过早地关闭启动的进程 遗憾的是,BCompare.exe不理解
/solo
命令行选项,因此我在Beyond Compare 3安装目录中编写了一个小bat文件:
C:\ProgramFiles(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
我尝试了他的答案,但它只有在“超越比较”尚未运行时才起作用。我在他的回答的帮助下找到了解决办法。这就是我在我的.gitconfig
[diff]
tool = bc3
[difftool]
prompt = false
[difftool "bc3"]
cmd = \"c:/program files (x86)/beyond compare 3/bcompare.exe\" -solo \"$LOCAL\" \"$REMOTE\"
注意-solo
。这会导致Beyond Compare生成程序的新实例
在windows上,我们应该使用/solo
选项,但由于git difftool
命令生成sh.exe
来处理其命令行,因此/solo
选项被错误地解释为路径。因此,我必须将其用作-solo
使用此选项,我运行
start git difftool--dir diff
,这样将释放命令提示符,新提示符将继续等待Beyond Compare的新实例退出。这也将确保由git
创建的临时文件/文件夹将继续有效,直到diff工具退出。您找到解决方案了吗?问题似乎是Beyond Compare在使用--dir diff标志启动时没有保持控制台会话(BComp.exe)打开,所以Git在BC读取临时目录之前就删除了它。根据,BComp.exe从版本控制系统启动时具有特殊行为。我怀疑它用于推理的任何东西都被这个标志破坏了。这对我来说很有用。然而,beyond compare网站上的说明是错误的,这对我不起作用(“未知工具”)。因此,我用cmd=C:/path/to/bcompare.exe\“$LOCAL\”\“$REMOTE\”
为BC编写了一个漂亮的包装器,而不是path=…
+1bcompare.exe/solo
选项适用于BC 3.1.9,因此不必使用批处理文件。为了将它与git difftool
集成,我必须将其用作-solo
,因为sh.exe
会将其解释为路径