Git diff不创建临时文件

4
我在使用git时遇到了一些奇怪的问题。我在Windows 7机器上使用git。
我想要审查一些代码更改,所以我启动了gitk来检查我想要审查的提交内容。在我的更改文件列表中,我突出显示了第一个文件,并可以看到其左侧的差异。但是我安装了Beyond Compare,在第一个文件上右键单击并选择“External Diff”。这很好用,我可以在Beyond Compare中对文件进行比较。
但是当我尝试对第二个文件执行相同操作时,它失败了。Beyond Compare打开了,我可以看到路径中显示了两个文件,但它们不存在。
当我查看我的文件系统时,我可以看到“git.gitk-tmp.7992”存在(引用的文件夹),但它是空的,因此Beyond Compare和git difftool无法捕获它们。
当我尝试在两个分支之间执行“git difftool”时,也会发生类似的情况。
我无法弄清楚为什么它不会创建那些临时文件!?
我希望有人能帮我解决这个问题。
谢谢
3个回答

4
我对Beyond Compare不是很熟悉,但我会尝试:
当您第一次运行外部diff时,它会启动BC。第二次运行时,它会启动一个新的BC进程,寻找上一个进程,然后发送消息给第一个实例,然后退出。
当您在gitk中点击外部diff时,它会创建临时文件,运行给定的命令,等待程序退出,然后删除临时文件。当您已经有一个BC实例时,第二个实例几乎立即退出,因此您无法找到它们。
这就是我能做的最好的 - 尝试查找BC的手册和论坛。

嗨Gracchus,那很有道理。我会尝试一些东西来看看是否如此。谢谢你的建议! - Jay Pete
我创建了一个名为gitdiffallmaster的bash脚本(我知道...很长),它一直工作正常,但现在突然停止工作了:#!/bin/sh cd $(git rev-parse --show-cdup) git diff --name-only master "$@" | while read filename; do git difftool "$@" --no-prompt "master:$filename" "$filename" & done 但现在突然出现了这个错误信息: $ git diffallmaster usage: git diff [--no-index] <path> <path>不过,经过我开始寻找你建议的方法后,似乎现在通过GitK可以正常工作了。 - Jay Pete

2

gracchus的回答非常准确,帮助我解决了问题。

在Beyond Compare的情况下,用户应该在gitk中使用BComp.exe而不是我之前使用的BCompare.exe

BComp.exe:

这是一个Win32 GUI程序。如果从版本控制系统启动它,它应该能正常工作。如果从控制台窗口启动它,控制台(或批处理文件)将不会等待它。

BCompare.exe:

这是主要的应用程序。无论打开多少窗口,只有一个副本会运行。如果启动第二个副本,它会告诉现有副本开始比较并立即退出。


1
我使用gitk + WinMerge,并遇到了同样的问题。在调用“External diff”命令之前,我通过关闭所有WinMerge实例或更改WinMerge设置来避免此错误:
Options > General > Uncheck the "Allow only one instance to run" checkbox.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接