如何通过Git Stash忽略尾随空格错误

5
我在使用 git 时遇到了一个不寻常的问题。我从很久没有用过的一个仓库中拉取代码,为了简单起见,我们假设有两个分支,develop 和 master。此时我已经在 develop 分支上,在切换到 master 分支后,没有进行任何更改,只是查看了文件。当我尝试切换回 develop 分支时,却无法切换,因为 README.md 文件被修改了。使用 git diff 命令查看后发现整个文件都被修改了,但内容完全相同,因此我认为这可能是某种空白字符错误。
我执行了 git checkout -- README.md 命令,但它仍旧显示为已修改状态。于是我尝试了 git stash -p 命令(这样我就可以将该文件藏匿起来),然后得到了以下信息:
warning: 3 lines add whitespace errors.

它继续说道:
warning: squelched 55 whitespace errors
warning: 60 lines add whitespace errors.

文件仍然被修改。

有没有办法避免这些错误?可能是什么原因导致的呢?

1个回答

4
正如你上面提到的,这个问题被称为“尾随空格”。Git 有几种处理空格的方式。你可以在这里阅读相关内容:https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration#_formatting_and_whitespace 你可以尝试设置以下配置值:
$ git config --global core.whitespace \
                      trailing-space, \
                      -space-before-tab, \
                      indent-with-non-tab, \
                      tab-in-indent, \
                      cr-at-eol

当git从stash中弹出内容时,它使用apply命令将其添加回工作目录,因此您可以使用此配置禁用apply警告。

git config --global apply.whitespace nowarn
or 
git config --global core.whitespace fix

#core.whitespace 常见空白问题的逗号分隔列表,
git diff将使用color.diff.whitespace来突出显示它们,
git apply --whitespace=error将把它们视为错误。

您可以在任何一个中间添加前缀-来禁用它们(例如:-trailing-space):

###blank-at-eol 将行末尾的尾随空格视为错误(默认启用)。

###space-before-tab 将出现在行首缩进部分中紧接在制表符字符之前的空格字符视为错误(默认启用)。

###indent-with-non-tab 将使用空格字符而不是等效制表符缩进的行视为错误(默认未启用)。

###tab-in-indent 将行首缩进部分中的制表符字符视为错误(默认未启用)。

###blank-at-eof 将文件末尾添加的空行视为错误(默认启用)。

###trailing-space 是一种简写方式,涵盖了blank-at-eolblank-at-eof两个问题。

###cr-at-eol 将行末的回车符视为行终止符的一部分,即如果回车符之前的字符不是空格,则不会触发trailing-space错误(默认未启用)。

###tabwidth=<n> 告诉Git一个制表符占据多少个字符位置;这对于indent-with-non-tab和Git修复tab-in-indent错误时很重要。默认制表符宽度为8。允许的值为1到63。


我在更改空格配置值方面毫无运气,即使是“git reset --hard HEAD”也没有起作用。唯一有效的方法是“git checkout -f develop”。 - Katharine Osborne

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