![]() |
打盹的泡面 · 时政要闻_国家能源局西北监管局· 5 月前 · |
![]() |
威武的馒头 · 亿佰购物倒闭负债近3000万元 波及20余家 ...· 8 月前 · |
![]() |
沉着的烈马 · 湖南邵阳启用"数字城管" ...· 8 月前 · |
![]() |
听话的日光灯 · 对外经济贸易大学教务处网站· 1 年前 · |
![]() |
逼格高的蛋挞 · 阿姐撸是什么歌_阿姐阿姐是什么歌_阿姐阿姐啊 ...· 1 年前 · |
当执行
git diff
时,它会显示“文件末尾没有换行符”。
这条消息的意义是什么,它试图告诉我们什么?
它只是指示文件的末尾没有换行符。这不是灾难,这只是一条消息,目的是让我们在查看命令行中的diff时更清楚地知道没有灾难。
它表明您在文件末尾没有换行符(通常为
'\n'
,也称为CR或CRLF)。
也就是说,简单地说,文件中的最后一个字节(如果使用Windows,则为字节)不是换行符。
显示该消息是因为否则无法区分末尾有换行符的文件和没有换行符的文件之间的区别。Diff必须输出换行符,否则结果将很难自动读取或处理。
请注意,如果文件格式允许,则始终将换行符作为最后一个字符是一种很好的样式。此外,例如,对于C和C++头文件,这是语言标准所要求的。
核心问题是定义行的内容,以及行结束字符序列是否是行的一部分。基于UNIX的编辑器(如VIM)或工具(如Git)使用EOL字符序列作为行终止符,因此它是行的一部分。它类似于在C和Pascal中使用分号(;)。在C中,分号终止语句,在Pascal中,分号将语句分隔。
如果您在现有文件的末尾添加了新的文本行,而该文件的末尾还没有
newline character
,则diff将显示旧的最后一行已被修改,即使在概念上它没有被修改。
这至少是在最后添加
newline character
的一个很好的理由。
示例
文件包含:
A() {
// do something
}
十六进制转储:
00000000: 4128 2920 7b0a 2020 2020 2f2f 2064 6f20 A() {. // do
00000010: 736f 6d65 7468 696e 670a 7d something.}
现在将其编辑为
A() {
// do something
// Useful comment
十六进制转储:
00000000: 4128 2920 7b0a 2020 2020 2f2f 2064 6f20 A() {. // do
00000010: 736f 6d65 7468 696e 670a 7d0a 2f2f 2055 something.}.// U
00000020: 7365 6675 6c20 636f 6d6d 656e 742e 0a seful comment..
git diff将显示:
-}
\ No newline at end of file
+// Useful comment.
换句话说,它显示出比概念上发生的更大的差异。它显示您删除了行
}
并添加了行
}\n
。事实上,这是发生了什么,但它不是概念上发生的事情,所以它可能会令人困惑。