如何在 Windows/Linux/Mac 操作系统上的 Git 中处理行尾字符?
这个问题也可以改写为 − 如何解决 Git 警告 − "LF 将被 CRLF 替换"?
在 Windows 操作系统中,行尾使用两个特殊字符"\r
"标记,而在 MacOS 和 Linux 系统中,“
” 字符用于标记行尾。
\r 和
分别称为回车符 (CR) 和 换行符 (LF)。为了在多个操作系统之间保持一致性,正确处理行尾字符非常重要。
行尾字符有两种配置方式 −
安装时−

安装时,Git 允许我们从以下选项中进行选择,以配置行尾转换,如上所示 −
检出 Windows 样式,提交 Unix 样式行尾 −在签出和提交操作时,CRLF 将被转换为 LF。当 Git 安装在 Windows 上且项目协作者使用非 Windows 计算机时,建议使用此设置。
按原样签出,提交 Unix 样式的行尾 − 签出时不会执行任何转换。但是,Git 会在提交文件时将 CRLF 转换为 LF。当 Git 安装在 Unix 样式的计算机上且项目协作者使用 Windows 计算机时,建议使用此设置。
按原样签出,按原样提交 − 签出或提交文件时不会执行任何转换。当安装 Git 的操作系统和协作者的操作系统相同时,建议使用此选项。机器相同。
安装后 − 配置 autocrlf 属性
应配置 "core.autocrlf" 属性来管理行尾转换。请考虑以下场景
场景 1 − Git 安装在 Windows 机器上,协作者使用不同的平台
A 先生和 B 先生正在开发同一个项目。A 先生使用 Windows 机器,B 先生使用 Mac 机器。如前所述,Windows 和 Mac 操作系统使用不同的字符来标记行尾。这意味着,如果 A 先生将代码提交到存储库,Git 应该从行尾删除回车符 (\r)。同样,当他从存储库中检出代码时,Git 应该更新行尾并添加回车符。
在 Windows 操作系统上,可以通过使用以下命令将"core.autocrlf"设置为 true 来实现。 −
$ git config --global core.autocrlf true
现在让我们创建一个文件,将其添加到暂存区并观察输出。
$ echo hello >abc.txt $ git add abc.txt
Git 将显示一条消息,指出文件 “abc.txt” 中的 LF 将被 CRLF 替换。如下所示 −
警告:abc.txt 中的 LF 将被 CRLF 替换。 该文件将保留其原始行尾。
场景 2 − Git 安装在 Unix 或 Mac 机器上,协作者在不同平台上工作
现在让我们考虑一个场景:B 先生使用 MacOS 机器并尝试签出代码。如果将代码签出到 Mac 或 Linux 机器,Git 不应修改行尾字符。但是,有时代码编辑器或 IDE 可能会意外添加回车符。在这种情况下,Git 应该足够智能,能够识别操作系统并在将代码添加到存储库之前删除回车符。在 Mac 或 Linux 系统上,可以通过在配置文件 − 中设置以下行来设置此行为。
$ git config --global core.autocrlf input
这意味着,Git 应该只在代码存储在仓库中时修改代码。
现在让我们创建一个文件,将其添加到暂存区并观察输出。
$ echo hello > abc.txt $ git add abc.txt
输出将是 −
Warning − LF will be replaced by CRLF in abc.txt. The file will have its original line endings in your working directory>
现在,让我们尝试观察在禁用 core.autocrlf 设置后添加文件时 Git 的行为。以下命令可用于禁用此设置。
$ git config --global core.autocrlf false
现在,让我们创建一个文件,将其添加到暂存区并观察输出。
$ echo hello > abc.txt $ git add abc.txt
由于 autocrlf 设置为 false,Git 现在不会显示任何警告消息。如果项目是由使用不同平台的合作者开发的,则不应使用此设置。
dell@DESKTOP−N961NRS VINGW64 /e/tut_repo (master) $ echo hello > def. txt dell@DESKTOP−N961NR5 MINGW64 /e/tut_repo (master) $ git add def.txt
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

