Git多层级配置冲突是否会导致shell脚本出现/bin/sh^M解释器错误?
配置冲突影响结论
- 你观察到的Git多层级配置冲突不会导致后续Shell脚本出现跨环境换行符异常:Git配置的读取优先级为
本地仓库配置(.git/config) > 全局用户配置(C:/Users/testUser/.gitconfig) > 系统级配置(C:\\ProgramData/Git/config),你的本地、全局配置已经将core.autocrlf设为false、core.eol设为lf,会覆盖系统级的core.autocrlf=true配置,不会自动将脚本转换为CRLF格式。 - 你之前遇到的
/bin/sh^M: bad interpreter报错,是因为修改Git配置前,仓库中已经存储了CRLF格式的build.sh文件,配置变更不会自动修改已有文件的换行符。
彻底修复方案
- 先验证当前本地build.sh的换行符格式,Git Bash下执行:
# 输出中每行末尾存在^M则代表是CRLF格式 cat -A build.sh
- 转换当前文件换行符为LF:
# Git Bash自带dos2unix工具,也可以用IDE重新保存为LF格式 dos2unix build.sh
- 为了避免团队其他成员的本地Git配置导致同类问题,建议在仓库根目录新增
.gitattributes文件,显式指定Shell文件的换行符规则,该规则优先级高于所有本地Git配置:
*.sh text eol=lf
- 提交修改后的build.sh和
.gitattributes文件到远程仓库即可。处理完成后所有环境拉取的.sh文件都会统一使用LF换行符,不会再出现Linux环境执行报错的问题。
内容的提问来源于stack exchange,提问作者JohnDoeDeer
相关产品推荐
相关产品推荐

