autocrlf 是 Git 中用于处理不同操作系统换行符(Line Endings)的核心配置参数,主要解决 Windows(使用 CRLF,即 \r\n)与 Unix/Linux/macOS(使用 LF,即 \n)之间的换行符差异问题,避免因换行符不一致导致的代码冲突或提交混乱。

其工作原理是:当文件在工作区与版本库(.git 目录)之间传输时,Git 会根据 autocrlf 的设置自动转换换行符。

常见配置值及含义

  1. autocrlf = true(Windows 系统推荐)

    • 提交(commit)时:自动将工作区的 CRLF 转换为 LF 存入版本库。
    • 检出(checkout)时:自动将版本库的 LF 转换为 CRLF 到工作区。
    • 适用场景:Windows 开发者使用 Windows 风格换行符,且团队可能有跨平台开发者。
  2. autocrlf = input(Unix/Linux/macOS 系统推荐)

    • 提交时:自动将工作区的 CRLF 转换为 LF 存入版本库(若工作区是 LF 则不处理)。
    • 检出时:不转换,直接使用版本库的 LF 到工作区。
    • 适用场景:Unix 类系统开发者,避免引入 Windows 风格换行符。
  3. autocrlf = false(不自动转换,需谨慎使用)

    • 提交和检出时均不转换换行符,完全由用户手动控制。
    • 风险:跨平台协作时易出现大量换行符变更的无效提交,或文件因换行符不一致被误判为修改。
    • 适用场景:明确需要保留原始换行符的特殊文件(如二进制文件、脚本等)。

配置方法

  • 全局配置(对所有仓库生效):

    # Windows 推荐
    git config --global core.autocrlf true
    
    # Unix/Linux/macOS 推荐
    git config --global core.autocrlf input
    
  • 局部配置(仅对当前仓库生效,需在仓库目录执行):

    git config core.autocrlf [true|input|false]
    
  • 查看当前配置:

    git config core.autocrlf
    # 或查看全局配置
    git config --global --get core.autocrlf
    

补充说明

  • 配合 .gitattributes 文件使用效果更佳:通过在仓库根目录添加 .gitattributes,可针对特定文件类型(如 *.txt*.sh)设置更精细的换行符规则,覆盖 autocrlf 的全局配置。
  • 避免混合使用不同配置:团队成员应统一换行符处理策略,否则可能导致提交记录混乱。