Git Gui“未检测到差异”

11

我在Git中有一个仓库,其中许多文件被标记为由Git Gui编辑,当我点击其中一个文件时会弹出一个对话框,其中包含:

    "No differences detected.

     filename.h has no changes.

     The modification date of this file was updated by another
     application, but the context within the file has not changed.

     A rescan will be automatically started to find other files which
     may have the stame state."
如果我点击“确定”按钮,应用程序将重新扫描并显示完全相同的结果,这会导致无限循环,因为任何具有此条件的文件都会呈现相同的对话框。
是否有任何方法可以通过忽略空格来自动删除这些内容以免被扫描到?

也许这可以帮助 https://dev59.com/hGw05IYBdhLWcg3wUAQ0#21754363 - msanford
1
@msanford,抱歉,没有更好的。 - SPlatten
2个回答

7

首先检查你的git config --global core.autocrlf 是否设置为false。

如果没有(或为空),请将其设置为false,再次克隆您的Git存储库,然后检查Git GUI是否保持其评估。


这条消息来自于“git-gui/lib/diff.tcl#handle_empty_diff”,其中的责任视图显示了10多年前的代码。

具有讽刺意味的是,有一次提交名为“git-gui: Avoid an infinite rescan loop in handle_empty_diff.” (提交 584fa9c)

如果索引更新机制和git diff在特定文件是否已修改时发生分歧,则可能导致git-gui进入无限索引重新扫描循环,其中空差异会启动重新扫描,找到相同的修改文件集,并尝试显示第一个文件的差异,该文件恰好是空文件。
当前可能存在分歧点的示例是autocrlf过滤器。

通过使用全局计数器跟踪自动重新扫描来打破此循环。每当显示非空差异时,变量就会被重置。

另一种建议的方法基于向git diff提供--exit-code参数,但不能使用,因为diff-files似乎信任索引中的时间戳,即使文件实际上未更改,也会返回非零代码,从而基本上破坏了自动重新扫描逻辑的目的。

尝试使用这个:git add --renormalize -- :/


这个文件被其他应用程序打开了吗? - VonC
git版本2.22.0.windows.1在Microsoft Windows [版本10.0.16299.1268]上。 - SPlatten
@SPlatten 尝试使用 Git 2.23(https://github.com/git-for-windows/git/releases/tag/v2.23.0.windows.1),并使用 git add --renormalize -- :/ 命令。 - VonC
这并不是我做决定的权利,无论如何谢谢您。 - SPlatten
@SPlatten 这只是一个存档文件,需要解压缩(PortableGit-2.23.0-64-bit.7z.exe),您可以完全控制。为了测试,请将您当前CMD会话中的%PATH%调整为简化版本。无需安装,无需修改注册表,无需提升权限。 - VonC
显示剩余3条评论

1
VonC的答案解决了我非常恼人的错误,这应该是被接受的解决方案。
一个问题是我复制并粘贴了“git add --renormalize -- :/”,结果在句子末尾加上了他的句号,就像这样:“git add --renormalize -- :/.”一个小时后我回来看这个答案,并意识到了我的错误。
这完全是我的错,因为他的代码标记显然在事后才能看出。

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