换行符转换策略
控制检出与提交时的行尾转换:检出时是否把换行转成 Windows 风格、提交时是否统一转成 Unix 风格。跨平台项目更推荐在属性文件里声明文本类型,让规则随仓库分发,而不是每个人各自配置一次。
基本信息
| 取值一 | 检出转为 Windows 风格、提交转为 Unix 风格,常见于 Windows |
|---|---|
| 取值二 | 提交转为 Unix 风格、检出不转换,常见于类 Unix 系统 |
| 取值三 | 不做任何转换,行尾统一交给属性文件 |
| 查看现状 | git ls-files --eol 查看每个文件的行尾状态 |
| 推荐做法 | 在属性文件里声明文本类型,规则随仓库走 |
典型使用场景
- Windows 与类 Unix 开发者协作同一个仓库
- 仓库出现整文件级别的假差异
- 新克隆后发现大量文件显示被修改
- 引入格式化工具后需要统一行尾
- 排查换行符导致的脚本执行失败
常用配置
常用配置
git config --global core.autocrlf true # Windows 常用
git config --global core.autocrlf input # 类 Unix 常用
git config --global core.autocrlf false # 不转换,交给属性文件
git ls-files --eol | head # 查看索引与工作区的行尾状态
# 推荐在属性文件里声明文本类型,让规则随仓库分发取值对照
| 取值 | 检出行为 | 适用系统 |
|---|---|---|
| true | 转为 Windows 风格行尾 | Windows 开发者 |
| input | 不做转换 | 类 Unix 系统 |
| false | 不做转换 | 已用属性文件统一行尾的仓库 |
规则随仓库走比每个人各配一次更可靠:属性文件里的声明对所有克隆生效,评审差异也更干净。
中途修改转换策略会出现整文件规模的假差异,先在少量文件上验证,再决定是否全仓统一。
脚本类文件的行尾很关键:转换不当会让脚本在类 Unix 系统上提示解释器路径相关错误。
查看行尾状态能看到索引与工作区两侧的实际情况,比只看配置项更能确认问题出在哪一侧。