What does "1 line adds whitespace errors" mean when applying a patch?

I'm editing some markdown files of a cloned remote repository, and wanted to test creating and applying patches from one branch to another. However, every time I make any change at all, I get the following message during git apply:

0001-b.patch:16: trailing whitespace.
warning: 1 line adds whitespace errors.

(This is happening on my Mac, and I don't know where the original code was created.)

What does the warning message mean, and do I need to care?

57254 次浏览

你不需要在乎。

这个警告制定了一个关于空格的文本文件清洁标准,这是许多程序员倾向于关心的事情。正如 手册解释的那样:

被认为是空格错误的内容被控制 空格配置。默认情况下,尾随空格 (包括仅由空格组成的行)和空格 属性中紧跟一个制表符的 行的初始缩进被认为是空格错误。

默认情况下,该命令输出警告消息,但应用补丁。

因此,“错误”意味着更改引入了尾随空格、仅使用空格的行或选项卡前的空格。除了这个事实之外,更改没有任何错误,它将干净而正确地应用。换句话说,如果您不关心“不正确”的空格,那么可以忽略这个警告,或者使用 git config apply.whitespace nowarn关闭它。

One case when you could legitimately care is when you want to differentiate between "old" whitespase error (that you might want to keep for legacy reason) and "new" whitespace errors (that you want to avoid).

为此,Git 2.5 + (2015年第二季度)将提出一个更具体的空白检测选项。

犯罪,第三季,第1集0ad782fD55ef3e[26 May 2015] by 滨野俊男(gitster)
(由 朱尼奥于2015年6月11日合并于 提交709cd91)

diff.c: --ws-error-highlight=<kind>选项

传统上,我们只关心引入的空格破坏 在新的路线。
有些人想在旧的上面画出空格断裂 当他们在一个新的行上看到一个空格断开时,他们 可以在对应的 我想说“啊,这些破损是存在的,但是它们 都是从祖先那里继承来的,所以我们暂时不要碰它们。”

Introduce --ws-error-highlight=<kind> option, that lets them pass 用逗号分隔的 oldnewcontext列表来指定 在哪些行上突出显示空格错误。

返回文章页面 documentation now includes:

--ws-error-highlight=<kind>

color.diff.whitespace指定的颜色突出显示由 <kind>指定的行上的空白错误。
<kind>oldnewcontext的逗号分隔列表。
如果没有给出此选项,则只突出显示 new行中的空格错误。

例如,--ws-error-highlight=new,old突出显示已删除和添加的行上的空格错误。
all can be used as a short-hand for old,new,context.

例如,旧的提交有一个空格错误(bbb) ,但是您可以只关注新的错误(在 still bbbccc的末尾) :

old and new shitespace errors

(测试完成后 t/t4015-diff-whitespace.sh)


在 Git 2.26(Q12020)中,diff-*管道子命令家族现在注意到了以前被忽略的 diff.wsErrorHighlight配置; 这使得“ git add -p”也可以向最终用户显示空格问题。

See 提交 da80635 (31 Jan 2020) by 杰夫 · 金(peff).
(由 朱尼奥 · C · 哈马诺 gitster于2020年2月14日在 提交 df04a31合并)

diff: move diff.wsErrorHighlight to "basic" config

签名: Jeff King

我们在 git_diff_ui_config()中解析 def.wsErrorHighlight,这意味着它不会对管道命令生效,只会对像 git diff本身这样的瓷器生效。
这有点烦人,因为它意味着像 add--interactive这样的脚本,它会产生用户可见的颜色差异,即 不尊重这个选择

我们可以教这个脚本解析配置并将其作为 --ws-error-highlight传递给 diff 管道。但有个更简单的解决办法。

对于管道来说,尊重这个选项应该是相当安全的,因为它只有在启用颜色时才起作用。任何解析彩色输出的人都必须已经处理这样一个事实: color.diff.*可能会更改他们看到的确切输出; 这些选项从 git_diff_basic_config()9a1805a872中开始就是它的一部分(添加一个“基本”diff 配置回调,2008-01-04,Git v1.5.4-rc3)。

So we can just move it to the "basic" config, which fixes add--interactive, along with any other script in the same boat, with a very low risk of hurting any plumbing users.

因为线以 TAB开头而不是以 SPACE开头。打开补丁文件,用 SPACE替换 TAB。例如,在 vim on line + 从补丁文件 x 类型删除空格,而不是删除 sign + ,并在 eqiv 上插入空格(CTRL)到原始大小。

这对我很有用:

git config apply.whitespace fix

在每次提交使用之前:

git add -up .