对于 Linux,任何一行文本都必须以换行符 (newline) 作为结束标记,即一行代表该行内容再加上 LF 换行符。如果文件的最后一行缺少了 LF 换行符,那么就会导致 Linux 的有些工具处理时丢弃该行。
换行符在编辑器中是以行后面有新行表示的,如果行是最后一行,那么其后必须跟空行来确保文件最后一行是完整行。
对于 Git,如果我们修改或提交的某个文件没有以空行结尾,那么:
\ No newline at end of file 提示\ No newline at end of file
提示)$ notepad 1.txt
$ git add .
$ git commit -m "update"
[master 7675cd2] update
1 file changed, 1 insertion(+)
create mode 100644 1.txt
$ notepad 1.txt
$ git diff
diff --git a/1.txt b/1.txt
index 5d93580..f8be7bb 100644
--- a/1.txt
+++ b/1.txt
@@ -1 +1,2 @@
-line1
\ No newline at end of file
+line1
+line2
\ No newline at end of file对于 Windows,虽说换行符是 CRLF,但是完整一行的视觉显示也是行后必须有新行,如果是最后一行,其后面也必须跟空行才能表示完整行。但是 Windows 对最后一行是不是完整行没有强制要求,如果不是,也没有任何问题。
只不过你 Windows 写的代码提交后一般会因为
core.autocrlf = true 设置在提交时自动将换行符转换成 LF
格式。这时如果你没有在文件尾添加空行,那对应转换的 LF
换行格式的文件尾行后也没有空行。(因为要有 CRLF 空行才会转成对应的 LF
空行)这样一来,仍旧会在 diff 中显示
\ No newline at end of file 提示,团队内的 Linux/Mac
成员拉取到的也是有问题的末尾行。
所以为了保证文件以一个换行符结束,我们可以使用
.editorconig 来设置:
# 保存时始终在文件尾部插入换行符(视觉空行)
[*]
insert_final_newline = true