首先要理解的一点是,对于不一样的操做系统,对于换行符的表示是不同的。也就是说当咱们在编辑一个文件,在键盘上按下回车键的时候,对于不一样的操做系统保存到文件中的换行符是不同的。见下表:java
CR:表示回车\r LF:表示换行\n CRLF:表示回车换行\r\n 敲下回车键,不一样的操做系统保存到文件中的值: Windows:使用的是CRLF ==> 即\r\n,文件中保存的是\r\n Linux/Unix: 使用的是LF ==> 即\n,文件中保存的是\n Mac OS: 使用的是CR ==> 即\r,文件中保存的是\r Mac OS X系统:使用的是LF ==> 即\n,文件中保存的是\n(Mac OS X已经改为和Unix/Linx同样使用LF)
问题: 既然不一样的操做系统,对于换行符使用不一样的表示形式,若是一个团队在开发一个共同的项目,若是你使用的是windows系统,而你的小伙伴用的是Mac的话,当大家使用git协同开发软件时,就会出现换行符不统一的问题。git
虽然对于不一样的操做系统,默认的换行符的表示方法不同,可是编辑器是能够设置在敲下回车键的时候保存的换行符是什么的,好比经常使用的vscode就能够进行设置。直接点击编辑器右下角的LF或者CRLF,出现以下图所示的设置,直接选择便可。在设置完成以后,在敲回车键,保存在文件中的换行符就是你设置的(CRLF或者是LF,设置什么就是什么)。segmentfault
Git为了解决上面提出的问题,会自动对换行符进行转换。转换的方案有3种:windows
能够发现,若是不使用第3种方案,那么在Git仓库(包括本地仓库和GitHub远程仓库)中保存的文件的换行符都是LF表示的。bash
咱们本身在开发过程当中,是能够修改/设置Git的换行符转换方案的。修改/设置的方法有2种。编辑器
设置autoclf属性,在控制台直接运行以下的一条命令就能够设置了:ui
// 提交时转换为LF,检出时转换为CRLF git config --global core.autocrlf true // 提交时转换为LF,检出时不转换 git config --global core.autocrlf input // 提交检出均不转换 git config --global core.autocrlf false
上述命令运行以后,会修改.gitconfig文件。操作系统
通常在项目中,为了不项目中同时出现CRLF和LF,还能够开启safecrlf检查。固然,若是你的项目本身定义了语法检查规则,例如使用eslint去约束换行符必须是LF,那么当你的文件中出现CRLF的时候,eslint会给你错误提示信息,告诉你不能包含CRLF,这时候,不开启safecrlf也是能够的 (通常建议开启)。eslint
开启方法以下第一条命令:code
// 拒绝提交包含混合换行符的文件 (通常设置为true) git config --global core.safecrlf true // 容许提交包含混合换行符的文件 git config --global core.safecrlf false // 提交包含混合换行符的文件时给出警告 git config --global core.safecrlf warn
上述命令运行以后,也会修改.gitconfig文件。
注意.gitattributes是针对一个单一的仓库的,也就是说每个代码仓库均可以包含一个.gitattributes文件。这种方式设置以后,不须要一个项目组里面的同事分别再去修改本身电脑的git的全局配置。
对于经过.gitattributes设置换行符的转换方案,可使用以下的命令:
1. text=auto:采用git认为最好的方式来处理文件,未在.gitattributes中设置的项默认按照这种方式处理; 2. text eol=crlf:对左边匹配的文件统一使用CRLF换行符格式,若是有文件中出现LF将会转换成CRLF; 3. text eol=lf:对左边匹配的文件统一使用LF换行符格式,若是有文件中出现CRLF将会转换成LF; 4. binary: 告诉git该文件为二进制,防止git修改该文件。git不会对对其中的换行符进行改变。 注意:.gitattributes文件必需要提交以后才能生效。
参考博客: