git:EOF的新空行

Max*_*sca 15 git macos vim newline eof

所以我git diff --checkadd-ing文件和commit-ing它们之前运行,并在我得到的两个特定文件上运行path/filename:linenumber: new blank line at EOF.如果我删除这些文件中的最后一个空行,我不会收到任何消息,但我认为使用换行符结束文件是一种很好的方式.奇怪的是,我认为其他文件具有完全相同的结尾,不会给出任何消息.我是git的新手,在OS X Yosemite上使用git 2.0.1.我使用vim作为我的编辑.

如何在避免此消息的同时以换行符结束我的文件?我应该忽略它吗?

rom*_*inl 22

这里有两个问题.

  • 你对"换行"与"新行"感到困惑:

    "新行"是实际的空行(仅包含"换行符"),"换行符"是用于标记当前行结尾的特殊字符.

    大多数编译器,解释器和Unix工具都希望您的文本文件以换行符结束,以避免在处理多个文件时产生歧义,而不是"新行".

    大多数编辑,包括Vim,在每一行的末尾添加必要的字符,包括最后一行,因此您无需做任何事情来确保满足要求.

    特别是在EOF上没有添加"新线".

  • 你可能习惯了不良行为:

    传统上,"换行符"字符被Unix工具,大多数编译器和Vim解释为"行终止符号".这意味着在该角色之后的任何内容都被认为是在另一条线上.由于该字符是文件中的最后一个字符,因此没有理由显示用户不存在的行.

    唉,大多数GUI编辑器将其解释为"行分隔符",这意味着它标记了两行之间的分隔,并且这些编辑器通常在文件末尾显示不存在的行以满足该解释.

    我可能假设太多,但看起来你习惯了这种错误的行为,并试图通过在文件末尾添加一个完全不必要的"新行"来模仿它.

要么继续在源文件的底部添加"新行",请将其视为某种格式和编码指南,并停止将这些Git消息视为错误消息.

或者你停止添加那些无用的"新行".

我会选择第二种选择.

  • 事实上,我现在意识到我在这里混淆了“换行”和“换行”。感谢您指出问题的根源! (2认同)
  • 很好的答案。当我使用大多数编辑器没有在末尾添加空行时,Git 总是抱怨。使用 vim 时,如果我最后有那个空行,它会抱怨!很高兴知道这只是因为编辑器本身以不同的方式呈现线条。 (2认同)

Sas*_*olf 13

git diff文档:

- 校验

如果更改引入空白错误,则发出警告.什么被认为是空白错误由core.whitespace配置控制.默认情况下,尾随空格(包括仅由空格组成的行)和在行的初始缩进内紧跟着制表符的空格字符被视为空格错误.如果发现问题,则退出非零状态.与--exit-code不兼容.

相应地,git config文档:

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 在行尾处理一个回车符作为行终止符的一部分,即使用它,如果在回车符之前的字符不是空格(默认情况下未启用),则不会触发尾随空格.

  • tabwidth=<n>告诉标签占用多少个字符位置; 这与缩进与非制表符相关,当Git修复制表符缩进错误时.默认选项卡宽度为8.允许的值为1到63.


如您所见,blank-at-eof默认情况下已启用.您可以通过添加禁用-blank-at-eofcore.whitespace,或者使用自己的配置core.whitespace结构.