Git 换行符

Windows 操作系统使用的 CRLF。

Unix 的操作系统使用的 LF。

Mac OS 起初使用的 CR,后来到了 Mac OS X 后,改成了使用 LF,与 Unix 系统保持一致。

问题

Windows 上 Git 在获取代码时,默认会自动把换行符由 LF 转为 CRLF,在提交时又把 CRLF 转为 LF。

在一些情况下这样会出现问题。

解决

1.在项目中添加 .gitattributes 文件,与 .gitignore 方式类似

https://git-scm.com/docs/gitattributes

https://github.com/alexkaratarakis/gitattributes

  • 使用 * text=auto 可以定义开启全局的换行符转换
  • 使用 *.bat text eol=crlf 就可以保证 Windows 的批处理文件在 checkout 至工作区时,始终被转换为 CRLF 风格的换行符
  • 使用 *.sh text eol=lf 就可以保证 Bash 脚本无论在哪个平台上,只要被 checkout 至工作区,始终被保持 LF 风格的换行符
  • 使用 *.jpg -text 可以禁止 Git 将 jpg 文件识别为文本文件,从而避免由于换行符转换引入的数据损坏

2.设置 Git(实际就是修改的用户目录下的 .gitconfig 文件)

# 提交时转换为 LF,检出时转换为 CRLF
git config --global core.autocrlf true
# 提交时转换为 LF,检出时不转换
git config --global core.autocrlf input
# 提交检出均不转换
git config --global core.autocrlf false

# 拒绝提交包含混合换行符的文件
git config --global core.safecrlf true
# 允许提交包含混合换行符的文件
git config --global core.safecrlf false
# 提交包含混合换行符的文件时给出警告
git config --global core.safecrlf warn

# 设置行结束符的类型为 lf
git config --global core.eol lf
# 设置行结束符的类型为 crlf
git config --global core.eol crlf
# 设置行结束符的类型为 native, native 是指平台默认的行结束符。默认的类型是 native
git config --global core.eol native

git config --global core.filemode false

开发仅在 Windows 上运行的项目,可以将 core.autocrlf 设置 false。

换行符转换

sudo apt-get install dos2unix
# 当前目录及其子目录下所有文件换行符转由 CRLF 为 LF
find ./ -type f -exec dos2unix {} +

https://git-scm.com/book/zh/v2/自定义-Git-配置-Git

原文地址:https://www.cnblogs.com/jhxxb/p/13237462.html