2012-11-02 146 views
4

我在使用git时遇到了一些有点奇怪的事情。我在我的Windows 7机器上使用git。git diff不会创建临时文件

我想查看一些代码更改,因此我激发了gitk来检查我想要查看的提交内容。在我更改的文件列表中,我突出显示了第一个文件,并可以看到左侧的差异。但我已经超越比较,并右键单击第一个文件并选择“外部差异”。这工作正常,我可以在Beyond Compare中比较文件。

但是当我试图对第二个文件做同样的事情时,它失败了。超越比较打开后,我可以看到两个文件显示在路径中,但它们不存在。

当我看看我的文件系统时,我可以看到“git.gitk-tmp.7992”存在(文件夹参考),但它是空的,因此Beyond Compare和git difftool当然不能选择它们。

当我尝试在两个分支之间做一个“git difftool”时会发生类似的情况。

我不明白为什么它不会创建这些临时文件?!?

我希望有人能够对此有所了解。

感谢

回答

3

我不知道除了比较那么好,但我会试试看:

当你运行一个外部的差别是第一次,它推出BC。第二次,它启动一个新的BC进程,它找到前一个进程,因此它向第一个实例发送消息,然后退出。

当你点击gitk中的外部差异时,它会创建临时文件,运行给定的命令,等待程序退出,然后删除临时文件。当你已经有一个BC实例时,第二个几乎立即退出,所以你找不到它们。

这是我能做的最好 - 尝试挖掘BC的手册和论坛。

+0

嗨Gracchus,这是有道理的。我会尝试一些东西,看看是否是这样。感谢您的输入! –

+0

我创建了这个名为gitdiffallmaster的bash脚本(我知道...这个工作了一段时间并停止工作: '#!/ bin/sh cd $(git rev-parse --show-cdup) git diff --name-only master“$ @”|同时读取文件名;做 混帐difftool “$ @” --no-提示 “主人:$文件名”, “$文件名” & 做 ' 但现在突然我得到这个错误消息: ' $ git的diffallmaster 使用:git diff [--no-index] ' 但是,我开始寻找你的建议之后,现在看起来好像经历了GitK的工作。 –

2

gracchus的回答很有用,帮助我解决了我的问题。

在Beyond Compare的案例中,用户应该在gitk中使用BComp.exe而不是BCompare.exe(我正在使用)。

BComp.exe:

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

BCompare.exe:

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