背景
在编译某平台的工程时,出现报错(别的同事的电脑没问题就我的电脑会报错)
./bulid.sh:line 2:$'/r':command not found
分析过程
- OK的电脑重新去仓库里拉代码依然可以成功编译,证明仓库上的代码是没有问题的
- 使用对比工具对比我电脑上的bulid.sh和OK的电脑上的bulid.sh两个文件没有差异
- 在报错的行数上,删除换行,可以解决报错
- 使用notepad++打开build.sh文件,选择显示所有字符对比,发现差异如下图
OK的电脑,换行符是LF
我的电脑,换行符是CR LF
知识点
CR/LF介绍
CR是Carriage-Return的缩写,即回车
LF是Line-Feed的缩写,即换行
Linux(unix) 和 mac 默认使用 "\n" 作为换行符,即LF
Windows 默认使用 "\r\n" 作为换行符,即CR LF
git中关于换行符的一些配置
core.autocrlf
core.autocrlf 选项有三个可选值:
true : 提交时改成LF,检出时改成CRLF
false (默认值): 提交时是什么就是什么,不改换行符,检出时也不改
input: 提交时改成LF,检出时不改
git查看和修改配置的指令
查看git config -l
全局配置git config --global core.autocrlf input
git配置建议
开发环境:windows
代码编译/运行环境: windows
建议配置 : core.autocrlf = true
开发环境:windows
代码编译/运行环境: Linux / Mac
建议配置 : core.autocrlf = input
开发环境:Linux / Mac
代码编译/运行环境: Linux / Mac
建议配置 : core.autocrlf = false (保持默认配置)
开发环境:Linux / Mac
代码编译/运行环境: Windows
建议配置 : core.autocrlf = true
解决方案
由于我是开发环境为windows,编译环境是Linux,所以在git命令行界面输入git config --global core.autocrlf input,然后重新checkout一下,就解决了该问题