当执行git diff
时,它会显示“文件末尾没有换行符”。
这条消息的意义是什么,它试图告诉我们什么?
发布于 2011-04-28 11:42:25
它表明您在文件末尾没有换行符(通常为'\n'
,也称为CR或CRLF)。
也就是说,简单地说,文件中的最后一个字节(如果使用Windows,则为字节)不是换行符。
显示该消息是因为否则无法区分末尾有换行符的文件和没有换行符的文件之间的区别。Diff必须输出换行符,否则结果将很难自动读取或处理。
请注意,如果文件格式允许,则始终将换行符作为最后一个字符是一种很好的样式。此外,例如,对于C和C++头文件,这是语言标准所要求的。
发布于 2016-06-08 00:36:27
这不仅仅是糟糕的风格,当在文件上使用其他工具时,它可能会导致意外的行为。
这是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
最后,如果您要添加新行,它会使diffs变得更加嘈杂。如果添加了第三行,则会显示对第二行的编辑以及新添加的内容。
发布于 2017-06-20 08:34:00
唯一的原因是Unix在历史上有一个惯例,即所有人类可读的文本文件都以换行符结尾。当时,这避免了在显示或连接文本文件时进行额外的处理,并避免了将文本文件与包含其他类型数据(例如不可读的原始二进制数据)的文件区别对待。
由于这种约定,那个时代的许多工具都期望结束换行符,包括文本编辑器、差异工具和其他文本处理工具。Mac是在BSD Unix上构建的,而Linux是为了与Unix兼容而开发的,因此这两个操作系统继承了相同的约定、行为和工具。
Windows不是为了与Unix兼容而开发的,所以它没有相同的约定,并且大多数Windows软件可以很好地处理没有尾随的换行符。
但是,由于Git首先是为Linux开发的,而且许多开源软件都是在Linux、most、FreeBSD等与Unix兼容的系统上构建的,所以大多数开源社区及其工具(包括编程语言)继续遵循这些约定。
有一些技术原因在1971年是有意义的,但在这个时代,它主要是约定和保持与现有工具的兼容性。
https://stackoverflow.com/questions/5813311
复制相似问题