我在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."
如果我单击“确定”按钮,则应用程序将重新扫描并显示完全相同的结果,并出现无限循环,因为任何处于这种情况的文件都将显示相同的对话框。
有什么方法可以通过忽略空格自动将其从扫描中删除吗?
答案 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文件似乎信任索引中的时间戳,并返回非零代码即使该文件实际上没有更改,这也从根本上破坏了自动重新扫描逻辑的目的。
答案 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 -- :/
”,一个小时后我回到了这个位置回答并意识到我做了什么。
这完全是我的错,因为事后看来他的代码标记很明显。