【问题标题】:Git Gui "No diffferences detected"Git Gui“未检测到差异”
【发布时间】:2019-12-24 16:24:45
【问题描述】:

我在 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."

如果我单击“确定”按钮,应用程序会重新扫描并显示完全相同的结果,这会出现无限循环,因为任何具有这种情况的文件都会显示相同的对话框。

有什么方法可以通过忽略空白自动从扫描中删除这些?

【问题讨论】:

标签: git git-gui


【解决方案1】:

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

如果不是(或为空),请将其设置为 false,再次克隆您的 Git 存储库,并检查 Git GUI 是否在其评估中持续存在。


消息本身来自“git-gui/lib/diff.tcl#handle_empty_diff”,其blame view 显示了 10 多年前的代码。

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

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

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

另一种建议的方法是基于将 --exit-code 参数提供给 git diff,不能使用,因为 diff-files 似乎信任索引中的时间戳,并且即使文件返回非零代码实际上没有改变,这基本上违背了自动重新扫描逻辑的目的。

试试这个:git add --renormalize -- :/

【讨论】:

  • 设置为false。
  • 此文件是否被其他应用程序打开?
  • 不,我只是在使用 Git GUI,它太烦人了,它会在 Unstaged Changes 列表中显示很多文件,当点击这些文件时,我会收到原始消息,然后重新扫描.
  • @SPlatten 你使用的是什么版本的 Git?在哪个操作系统上?我已经编辑了我的答案。
  • git 版本 2.22.0.windows.1 在 Microsoft Windows [版本 10.0.16299.1268]
【解决方案2】:

VonC 的上述回答为我解决了这个非常烦人的错误。这应该是公认的解决方案。

一个问题是我复制并粘贴了“git add --renormalize -- :/”,它以他的句号结尾,就像这样:“git add --renormalize -- :/.”我在一个小时后回到这个答案并意识到了什么我已经完成了。

这完全是我的错,因为事后看来他的代码标记很明显。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2011-02-06
    • 2015-11-20
    相关资源
    最近更新 更多