Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git difftool--dir diff没有创建供Beyond Compare 3使用的临时文件_Git_Msysgit_Beyondcompare3 - Fatal编程技术网

git difftool--dir diff没有创建供Beyond Compare 3使用的临时文件

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的新(从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\\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=…
+1
bcompare.exe/solo
选项适用于BC 3.1.9,因此不必使用批处理文件。为了将它与
git difftool
集成,我必须将其用作
-solo
,因为
sh.exe
会将其解释为路径