git diff认为文件的最后一行在文件结束后被移动了?

时间:2012-07-10 13:29:28

标签: git line-endings

从Github克隆git存储库后,如果我打开文件,不进行任何更改并保存文件,则会在git diff的输出中显示以下内容:

-@import "sync.scss";
\ No newline at end of file
+@import "sync.scss";

据我了解,\ No newline at end of file应该在没有换行符时标记文件的结尾。这个差异是否意味着git认为最后一行在文件结束后被移动到了? 有没有办法避免这种情况?我想为这个项目做出贡献,而不会在我的提交中添加垃圾空白更改。

这似乎是行结尾的问题。我相当确信该文件最初使用Unix行结尾保存在Mac上。这与我正在使用的设置相同,所以我不确定在保存文档时是什么导致文档更改。

2 个答案:

答案 0 :(得分:4)

  • 为了避免这种情况,请始终执行git add -p,并选择相关的差异以避免不必要的更改。

  • 并更改编辑器设置以匹配项目中使用的约定。

答案 1 :(得分:3)

\ No newline at end of file属于它上面的一行(意思是该行不以\n结尾)。您当前的行似乎在最后有一个换行符,这就是为什么您之后看不到“No newline”消息的原因;以及为什么会发生变化。

  

我想为这个项目做出贡献,而不会在我的提交中添加垃圾空白更改。

(警告:下面的个人意见)

我建议您始终使用换行符结束文件,尤其是在unix / linux环境中工作时。可能有些人认为这是“垃圾”(请问项目维护者对此有何看法),但是当使用posix工具时 - 从简单的cat开始 - 缺少的换行符将是最好的滋扰和破坏脚本在最坏的情况下改变代码。