标签:unix binary eol amp inux 定义 生效 str 就是
首先要理解的一点是,对于不同的操作系统,对于换行符的表示是不一样的。也就是说当我们在编辑一个文件,在键盘上按下回车键的时候,对于不同的操作系统保存到文件中的换行符是不一样的。见下表:
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协同开发软件时,就会出现换行符不统一的问题。
虽然对于不同的操作系统,默认的换行符的表示方法不一样,但是编辑器是可以设置在敲下回车键的时候保存的换行符是什么的,比如常用的vscode就可以进行设置。直接点击编辑器右下角的LF或者CRLF,出现如下图所示的设置,直接选择即可。在设置完成之后,在敲回车键,保存在文件中的换行符就是你设置的(CRLF或者是LF,设置什么就是什么)。
Git为了解决上面提出的问题,会自动对换行符进行转换。转换的方案有3种:
可以发现,如果不使用第3种方案,那么在Git仓库(包括本地仓库和GitHub远程仓库)中保存的文件的换行符都是LF表示的。
我们自己在开发过程中,是可以修改/设置Git的换行符转换方案的。修改/设置的方法有2种。
设置autoclf属性,在控制台直接运行如下的一条命令就可以设置了:
// 提交时转换为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也是可以的 (一般建议开启)。
开启方法如下第一条命令:
// 拒绝提交包含混合换行符的文件 (一般设置为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文件必须要提交之后才能生效。
参考博客:
标签:unix binary eol amp inux 定义 生效 str 就是
原文地址:https://www.cnblogs.com/wangwenhui/p/12141758.html