当做一个git差异,它说“没有换行在文件末尾”。
这条信息的意义是什么,它想告诉我们什么?
当做一个git差异,它说“没有换行在文件末尾”。
这条信息的意义是什么,它想告诉我们什么?
当前回答
这不仅仅是糟糕的样式,还可能导致在文件上使用其他工具时出现意想不到的行为。
下面是test.txt:
first line
second line
最后一行没有换行符。让我们看看文件中有多少行:
$ wc -l test.txt
1 test.txt
也许这就是您想要的,但在大多数情况下,您可能希望文件中有2行。
此外,如果你想合并文件,它可能不会像你期望的那样表现:
$ cat test.txt test.txt
first line
second linefirst line
second line
最后,如果你要添加一个新的行,它会使你的差异稍微更嘈杂。如果您添加了第三行,它将显示对第二行以及新添加的内容的编辑。
其他回答
它表示在文件末尾没有换行符(通常是\n,也就是LF或CRLF)。
也就是说,简单地说,文件中的最后一个字节(如果在Windows系统中,则为字节)不是换行符。
之所以显示此消息,是因为没有办法区分末尾有换行符和没有换行符的文件。Diff无论如何都必须输出换行符,否则结果将难以读取或自动处理。
注意,在文本文件中,如果文件格式允许,总是将换行符作为最后一个字符是一种很好的风格。此外,例如,对于C和c++头文件,它是语言标准所要求的。
这不仅仅是糟糕的样式,还可能导致在文件上使用其他工具时出现意想不到的行为。
下面是test.txt:
first line
second line
最后一行没有换行符。让我们看看文件中有多少行:
$ wc -l test.txt
1 test.txt
也许这就是您想要的,但在大多数情况下,您可能希望文件中有2行。
此外,如果你想合并文件,它可能不会像你期望的那样表现:
$ cat test.txt test.txt
first line
second linefirst line
second line
最后,如果你要添加一个新的行,它会使你的差异稍微更嘈杂。如果您添加了第三行,它将显示对第二行以及新添加的内容的编辑。
这实际上会导致一个问题,因为行结束符会自动修改,而不会对文件进行任何更改。请参阅这篇文章以获得解决方案。
git用CRLF替换LF
它只是指出文件的末尾没有换行符。这不是一个灾难,这只是一个信息,让它更清楚地表明,在查看命令行中的差异时,不存在差异。
核心问题是你如何定义“线”以及是否“结束在线” 字符序列是否是行的一部分。基于unix的编辑 (如VIM)或工具(如Git)使用EOL字符序列作为 行结束符,因此它是直线的一部分。它类似于 在C和Pascal中使用分号(;)。在C中,分号终止 在Pascal中,它把它们分开了。