ActPi向阳技术栈
← 返回文章列表

git提交文件后CRLF和LF的换行处理问题

文章目录
  1. 问题发现
  2. 原因探究
  3. 问题根源
  4. 解决办法

问题发现

代码提交 gitlab 后拉取下来 rsync 同步到测试服时发现文件有差异

原因探究

  1. 怀疑提交 git 后文件状态改变,修改 rsync 同步参数改为计算 MD5 值进行比对
  2. 修改参数后仍然有差异,拉取文件进行 MD5 值计算,发现确实 MD5 值不一致
  3. 拉取文件进行差异对比,发现文件内容完全一样,怀疑文件有格式问题
  4. 将两个环境的文件同时在 notepadd++ 打开,发现格不一致 windows(CRLF) 与 unix(LF)
  5. 经检查原始文件格式为 windows(CRLF),提交到 git 后变为 unix(LF)

问题根源

CRLF 和 LF 是文本换行的不同方式: CRLF 是 carriagereturnline feed 的缩写,中文意思是回车换行,“\r\n”, windows 系统的换行方式 LF 是 line feed 的缩写,中文意思是换行,“\n”, 是 Linux 系统的换行方式

git会通过CRLF和LF的配置来对源文件文本进行格式处理 在使用 git 提交代码的时候,git 会自动将代码文件当中 CRLF 转换为 LF,再进行同步即有差异

解决办法

修改 git 全局配置文件,core.autocrlf true 改为 false


git config --global core.autocrlf true

core.autocrlf git 中负责处理 line endings 的变量

设置为 true,添加文件到 git 仓库时,将把 crlf 变成 lf
设置为 false 时,line-endings 将不做转换操作。文本文件保持原来的换行方式