Git, 空格错误, squelching 和 autocrlf,明确的答案

49
请你能够解释一下git中的空格错误是什么意思,什么是“squleching”,我需要担心吗?(在msysgit上运行,但其他用户在linux上)。这里已经有一个关于autocrlf的“最终”答案here(将其设置为false git config --global core.autocrlf false)。

这里有一个关于空格错误的“明确”的答案,请点击此处。 - Mechanical snail
3个回答

34

Squelching 最初是一种在电信中使用的函数,用于设置一个阈值,高于该阈值的信号可以通过,低于该阈值的信号则被抑制。

在你的情况下,当你看到:

warning: squelched 104 whitespace errors
warning: 109 lines add whitespace errors. 

这意味着:它不会显示100多个错误消息,而是警告你应该已经显示了这些错误(但是为了避免混乱输出,它不会显示)

我没有关于空格策略的明确建议,除非首先确定它们最初是为什么引入的。
如果你的编辑器不会在Windows和Unix之间转换eol(行尾)字符,那么它意味着它自动添加或删除空格,这并不总是有用的。

第一项测试(如此博客文章所述)是禁用该策略:

git config core.whitespace nowarn

或者尝试

git config core.whitespace fix

看看是否有助于您的变基操作。


那么,像我的编辑器将制表符转换为空格这样的操作会显示为错误吗?(实际上,不是变基给我发了这个消息,而是重新应用一个存储 - 它没有阻止重新应用,但我想理解这个消息) - Benjol
1
@Benjol:在这种情况下,“squelch”消息是为了警告您将来合并情况(合并,变基,推送到,从中拉取)可能会出现问题。 - VonC
"core.whitespace no warn" 对我没有起作用。我需要重新启动机器或终端吗? - kakyo
@kakyo 不是"no warn",应该是"nowarn"(一字)。 - VonC
我确实使用了一个单词“nowarn”(可能是Safari的拼写检查搞乱了我的注释)。但我仍然看到很多与空格相关的警告,比如“尾随空格”。 - kakyo
@kakyo:请看下面我的回答,我认为它会对你有所帮助。 - Vince

17

以下是如何在使用git apply时修复“结尾空格”错误:

首先需要了解的是:什么是空格错误。这在core.whitespace setting documentation中有解释。基本上,git处理几种类型的空格错误:

blank-at-eol
blank-at-eof
space-before-tab
indent-with-non-tab
tab-in-indent
cr-at-eol

尾随空格错误可能会在使用Windows样式行结束符(CRLF)补丁文件时引起。 为避免此警告,您可以要求git apply不显示警告:

git apply --whitespace=nowarn fix.patch

或者您可以通过-c即时上编辑git配置,告诉git:"好的git,这次行末的CR没问题":

git -c core.whitespace=cr-at-eol apply fix.patch
如果你想要使它永久生效,只需像这样编辑git配置:

git config apply.whitespace nowarn
或者:
git config core.whitespace cr-at-eol

14

在搜索答案并查看git-config和git-apply手册后,我发现

git config apply.whitespace nowarn

禁用当前存储库中的空格错误显示。

要使其适用于所有存储库,请添加--global,如下所示:

git config --global apply.whitespace nowarn

core.whitespace 对我没用,但 apply.whitespace 有效。在我的情况下,应用 diff 时会出现空格警告 git apply file.diff - amertkara

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