关于linux跟windows文件格式的问题
在windows下创建的文件跟linux下创建的文件格式是不一样的
cat -A test查看,若每行后面有^M$,则代表是Windows下创建的文件,若每行后面是$,则是linux下创建的
Windows下的换行符是\r\n
linux下是\n,所以多出来的\r会造成多了一个特殊字符,从而造成文件不能正常读取使用。去除\r的方法是:
cat text | tr -d "\r" > text1 //然后再用text1替换text即可
CRLF和LF在跨平台工作的时候带来的烦恼及解决办法
参考文档: https://www.jianshu.com/p/dd7464cf32b5
1. CRLF LF CR 都是什么意思:
- CRLF: 是carriagereturnlinefeed的缩写。中文意思是回车换行。
- LF: 是line feed的缩写,中文意思是换行。
- CR: 是carriagereturn的缩写。中文意思是回车。
早期的mac系统使用CR当做换行,现在也已经统一成了LF
Unix(包含现在大量使用的linux)系统使用LF
windows系统使用LFCR当做换行(自作聪明的兼容性??)也正是因为不同系统的分歧,在多人协作共同开发的时候,可能导致提交代码时候产生问题。
2. 跨平台合作时候的解决方式
core.autocrlf配置说明
git为了防止以上问题扰乱跨平台合作开发,使用命令可以转化LF和CRLF
git config --global core.autocrlf true
Git可以在你push时自动地把行结束符CRLF转换成LF,而在pull代码时把LF转换成CRLF。用core.autocrlf来打开此项功能,如果是在Windows系统上,把它设置成true,这样当签出代码时,LF会被转换成CRLF
git config --global core.autocrlf input
把core.autocrlf设置成input来告诉 Git 在push时把CRLF转换成LF,pull时不转换
我现在在git上使用此设置,因为我从windows上拉下来的文件和代码会再上传到linux服务器上,如果格式为CRLF会在linux服务器上运行发生错误
git config --global core.autocrlf false
在本地和代码库中都保留CRLF,无论pull还是push都不变,代码库什么样,本地还是什么样子
延伸:vim中查看文件格式和编码
查看文件格式和编码
:set fileformat? #查看文件格式
:set fileencoding #查看文件编码
设置文件格式或编码
:set fileformat=unix
:set fileencoding=utf-8 #设置文件编码为utf-8
网友评论