2018年11月

写在前面

  • 在直接用 Git 命令行上传爬下来的代码的时候,发现上传到Github上的代码文件异常,具体表现为,在代码文件使用 txt 格式结尾的时候,浏览代码结构松散,进一步检查发现在行末有不可见的符号,使用 cc 结尾的文件,在行尾都有一个 ==^M==, 后来谷歌出了结果,记录如下(确实吐槽某度)
  • 换行符和回车符的区别

    • 换行符是另起一行,使用 ‘\n’来表示,意味 ‘newline‘
    • 回车符是回到一行的开头,使用 ‘\r’来表示, 意味 'return'
  • 不同操作系统平台的换行符

    • Unix / Linux 使用的是 'LF' (0x0A)
    • 现在的MacOS使用的是 'CR' (0x0D)
    • DOS / Windown 上使用的是 'CRLF' (0x0D0A)
  • 换行符底层标识符不同也就导致了在不同的平台上,阅读和执行的体验结果可能有区别,这次将在Win平台上爬下来的以 UTF-8 编码保存的文档上传到Github时,就成功入坑了
  • Git 有一个功能叫做 换行符自动转换,在使用 git 的时候,该功能时默认开启的,作用就是,当你将项目clone到本地的时候,git自动的将文件中的换行符换成Win的CRLF,而当add和push 的时候,git再自动的把项目文件的所有CRLF换成LF,WTF?这样首先就把所有的文件每一行都改变了,diff看不出具体修改了哪里

Git

推荐解决方法

  • 首先,在安装Git客户端被询问是否开启自动换行符转换的时候,选择 'Checkout as-is, commit as-is',(尤其是UTF-8,尤其是包括中文)
  • 推荐在命令行下更改设置为不自动替换换行符,但是强制开启换行符检查功能,避免发布的文件出现问题
--------------------------------------
git config --global core.autocrlf false
git config --global core.safecrlf true
  • 再就是如果是爬下来的,或者是编辑时选择的不是Unix格式的换行符的,Git提供了一个叫做dos2unix的命令让文件替换成Unix格式,Linux如果没有的话apt / yum安装一下就好