转载: @换行符自动转换
问题描述
多平台共同开发时,使用的gitlab托管代码,Clone或者Pull下来的代码存在换行符问题,导致脚本使用无法在cygwin运行。
总结:
- 换行符:
- UNIX/Linux : LF (0x0A),'\n'
- Mac OS : LF (0x0A),之前是CR (0x0D)。
- DOS/Windows: CRLF(0x0D0A) '\r\n'
查看方式:使用 Notepad++打开文件,点击小图标“显示所有字符”
QQ图片20170922154346.png QQ图片20170922154726.pngCR用符号'\r'表示, 十进制ASCII代码是13, 十六进制代码为0x0D;
LF使用'\n'符号表示, ASCII代码是10, 十六制为0x0A. 所以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示, 而UNIX和苹果平台上换行则是使用0a或0d一个字节表示
- git智能转换
- 自动模式
- 当你在签出文件时,它试图将 UNIX 换行符(LF)替换为 Windows 的换行符(CRLF);当你在提交文件时,它又试图将 CRLF 替换为 LF。保持仓库内文件的一致性(UNIX 风格)
- 问题发生:
在windows环境下,当Clone或Pull下来的代码,自动将文件换行符改成了CRLF,包括SHELL脚本,但是我们项目中是使用cygwin运行脚本的,这会导致换行符问题:
打开build.sh,发现所有的换行符都是CRLF;
解决问题
- 修改GIT配置
-
GIT 命令:
QQ截图20170922184311.png
先设置不自动转换,
再添加换行符检查功能,在提交代码时,当发现混用时,就不提交代码
- 如果使用的TortoiseGit的话,可以这样设置:
- 当在提交代码时,出现混用的话,可以将文件改成unix形式,使用命令dos2Unix命令:
测试:在windows下创建一个文件,使用dos2Unix转换:
转换后:
QQ截图20170922185609.png已经将CRLF变成LF
网友评论