git difftool --dir-diff没有为Beyond Compare 3创建临时文件

时间:2012-11-09 15:32:14

标签: git msysgit beyondcompare3

我正在尝试使用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"

4 个答案:

答案 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 853e10cDavid 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创建的临时文件/文件夹将继续存在,直到差异工具退出。