CRLF will be replaced by LF

2023-08-23 18:36:22 浏览数 (3)

代码语言:javascript复制
git add .

warning: CRLF will be replaced by LF in X.

  • CRLF:windows 环境下的换行符
  • LF:linux 环境下的换行符

这个错误的意思,就是文件中存在两种环境的换行符,git 会自动替换 CRLF 为 LF ,所以提示警告。

首先推荐扩展阅读:配置 Git 处理行结束符 | GitHub

我项目中是配置了 .gitattributes 的:

代码语言:javascript复制
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto

# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.h text

# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary

.gitattributes

公式:要匹配的文件模式 属性1 属性2 ...

示例 1

代码语言:javascript复制
* text=auto

对任何文件,设置 text=auto,表示文件的行尾自动转换。如果是文本文件,则在文件入 Git 库时,行尾自动转换为 LF。如果已经在入 Git 库中的文件的行尾为 CRLF,则该文件在入 Git 库时,不再转换为 LF。

示例 2

代码语言:javascript复制
*.txt text

对于 txt 文件,标记为文本文件,并进行行尾规范化。

示例 3

代码语言:javascript复制
*.jpg -text

*.jpg binary

对于 jpg 文件,标记为非文本文件,不进行任何的行尾转换。*.jpg -text 可能是旧版本的写法。

示例 4

代码语言:javascript复制
*.vcproj text eol=crlf

对于 vcproj 文件,标记为文本文件,在文件入 Git 库时进行规范化,即行尾为 LF。但是在检出到工作目录时,行尾自动转换为 CRLF。

示例 5

代码语言:javascript复制
*.sh text eol=lf

对于 sh 文件,标记为文本文件,在文件入 Git 库时进行规范化,即行尾为 LF。在检出到工作目录时,行尾也不会转换为 CRLF(即保持 LF)。

示例 6

代码语言:javascript复制
*.py eol=lf

对于 py 文件,只针对工作目录中的文件,行尾为 LF。

还是有问题

在项目中已经添加 .gitattributes 文件,但是还是出现了报错,这时要检查 git 的版本。(CentOS 自带的 git 版本较低)

可以参考:CentOS yum 升级 git 版本

后来还查到了一个方法,.gitattributes

代码语言:javascript复制
* -crlf

References

  • Git 的 gitattributes 文件详解 | csdn
  • gitattributes - Defining attributes per path | git-scm
  • How to make Git ignore different line endings | rtuin

– EOF –

  • # git

1 人点赞