Git Gui“未检测到差异”

时间:2019-08-19 12:37:07

标签: git git-gui

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

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

有什么方法可以通过忽略空格自动将其从扫描中删除吗?

2 个答案:

答案 0 :(得分:1)

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

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


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

具有讽刺意味的是,有一个名为“ git-gui的提交:避免在handle_empty_diff中发生无限的重新扫描循环。”(commit 584fa9c

  

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

     

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

     

不能使用另一种建议的方法,该方法基于将--exit-code参数赋予git diff,因为diff文件似乎信任索引中的时间戳,并返回非零代码即使该文件实际上没有更改,这也从根本上破坏了自动重新扫描逻辑的目的。

尝试git add --renormalize -- :/

答案 1 :(得分:0)

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

一个问题是我复制并粘贴了“ using FlaUI.UIA3; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace Control { class Photoshop { public static int processId; [DllImport("user32.dll", SetLastError = true)] static extern uint GetWindowThreadProcessId(IntPtr hWnd, out int processId); [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl); private struct WINDOWPLACEMENT { public int length; public int flags; public int showCmd; public Point ptMinPosition; public Point ptMaxPosition; public Rectangle rcNormalPosition; } // take a screenshot of the document public async Task<object> screen(int handle) { Bitmap final = null; GetWindowThreadProcessId((IntPtr)handle, out processId); Process Proc = Process.GetProcessById(processId); WINDOWPLACEMENT placement = new WINDOWPLACEMENT(); GetWindowPlacement((IntPtr)Proc.MainWindowHandle, ref placement); var app = new FlaUI.Core.Application(Proc); var automation = new UIA3Automation(); Bitmap capture = app.GetMainWindow(automation).Capture(); if (placement.showCmd == 1) // 1- normal, 3- maximize { final = documentArea(capture); } else { Bitmap crop = cropImage(capture, new Rectangle(8, 8, capture.Width - 16, capture.Height - 16)); final = documentArea(crop); } return ImgtoBase64(final); } public static Bitmap documentArea(Bitmap b) { int x = 45; int y = 87; Rectangle area = new Rectangle(x, y, b.Width - x, b.Height - y); return cropImage(b, area); } public static Bitmap cropImage(Bitmap b, Rectangle r) { Bitmap nb = new Bitmap(r.Width, r.Height); using (Graphics g = Graphics.FromImage(nb)) { g.DrawImage(b, -r.X, -r.Y); return nb; } } public static string ImgtoBase64(Bitmap img) { MemoryStream ms = new MemoryStream(); img.Save(ms, ImageFormat.Png); byte[] byteImage = ms.ToArray(); return Convert.ToBase64String(byteImage); } } } ”,它以句子结尾处的句号结尾,例如:“ git add --renormalize -- :/”,一个小时后我回到了这个位置回答并意识到我做了什么。

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