Ale*_*ysh 427
它表示您'\n'在文件末尾没有换行符(通常称为CR或CRLF).
也就是说,简单来说,文件中的最后一个字节(或者如果你在Windows上的字节)不是换行符.
显示该消息是因为否则无法区分结尾处有换行符的文件与不换行换行符的文件之间的区别.Diff必须输出换行符,否则结果将更难以自动读取或处理.
请注意,如果文件格式允许,则始终将换行符作为最后一个字符是一种很好的样式.此外,例如,对于C和C++头文件,它是语言标准所要求的.
Dea*_*ean 90
这不仅仅是糟糕的风格,在文件上使用其他工具时可能会导致意外行为.
这是test.txt:
first line
second line
Run Code Online (Sandbox Code Playgroud)
最后一行没有换行符.让我们看看文件中有多少行:
$ wc -l test.txt
1 test.txt
Run Code Online (Sandbox Code Playgroud)
也许这就是你想要的,但在大多数情况下你可能希望文件中有2行.
此外,如果您想要合并文件,它可能不会按照您期望的方式运行:
$ cat test.txt test.txt
first line
second linefirst line
second line
Run Code Online (Sandbox Code Playgroud)
最后,如果要添加新行,它会使你的差异稍微嘈杂.如果您添加了第三行,它将显示第二行的编辑以及新添加.
Nat*_*ike 24
唯一的原因是Unix历史上有一个以换行符结尾的所有人类可读文本文件的约定.当时,这在显示或加入文本文件时避免了额外的处理,并且避免了对包含其他类型数据的文件(例如,人类不可读的原始二进制数据)不同地处理文本文件.
由于这种惯例,那个时代的许多工具都期望结束换行符,包括文本编辑器,差异工具和其他文本处理工具.Mac OS X构建于BSD Unix之上,Linux开发为与Unix兼容,因此两种操作系统都继承了相同的约定,行为和工具.
Windows并不是与Unix兼容的,因此它没有相同的约定,大多数Windows软件都会处理得很好,没有尾随的换行符.
但是,由于Git是首先为Linux开发的,并且许多开源软件都是基于Unix兼容的系统构建的,如Linux,Mac OS X,FreeBSD等,大多数开源社区及其工具(包括编程语言)都在继续遵循这些惯例.
技术原因在1971年是有道理的,但在这个时代,它主要是惯例并保持与现有工具的兼容性.
Jas*_*eem 16
如果你在现有文件的末尾添加一个新行,该行在最后没有换行符,那么差异将显示旧的最后一行也是修改过的,当概念上它不是.
至少有一个很好的理由在最后添加换行符.
此约定付诸实践的原因是因为在类UNIX操作系统上,换行符被视为行终止符和/或消息边界(这包括进程之间的管道,行缓冲等).
例如,考虑将仅具有换行符的文件视为单个空行.相反,长度为零字节的文件实际上是一个零行的空文件.这可以根据wc -l命令确认.
总而言之,这种行为是合理的,因为如果\n字符仅仅是行分隔符而不是行终止符,则没有其他方法可以区分空文本文件与具有单个空行的文本文件.因此,有效的文本文件应始终以换行符结尾.唯一的例外是文本文件是否为空(没有行).
小智 5
核心问题是如何定义行以及行尾字符序列是否为行的一部分。基于UNIX的编辑器(例如VIM)或工具(例如Git)使用EOL字符序列作为行终止符,因此它是行的一部分。这类似于在C和Pascal中使用分号(;)。在C中,分号终止语句,在Pascal中,将它们分开。
| 归档时间: |
|
| 查看次数: |
186485 次 |
| 最近记录: |