eve*_*tic 8 git line-endings eol carriage-return linefeed
在为项目设置 Git 时,我注意到行尾规范化在 Linux 和 Windows 上的工作方式略有不同。
据我了解有关此主题的 Git 文档,Windows 上的行为是正确的。具体来说,当.gitattributes文件存在时,它应该覆盖core.autocrlf设置。
下表显示了我所做的一些实验的结果。最左边的两列显示.gitattributes文件和core.autocrlf设置。其他列显示以下git命令的结果:
git rm --cached <file> (强制下一次结帐以执行行规范化处理)。git checkout HEAD -- <file> (签出文件,应用行结束规范化)git ls-files --eol <file> (检查工作树中的行尾)+----------------+---------------+-------------+-- ------------+--------------+-------------- ----+----------------------------+ | .git 属性 | core.autocrlf | Linux 2.7.2 | Linux 2.11.0 | Linux 2.16.2 | Windows 2.12.2.windows.2 | Windows 2.16.1.windows.1 | | | | | | | | | +----------------+---------------+-------------+-- ------------+--------------+-------------- ----+----------------------------+ | 无 | 真实| 带crlf | 带crlf | 带crlf | 带crlf | 带crlf | | | | | | | | | +----------------+---------------+-------------+-- ------------+--------------+-------------- ----+----------------------------+ | 无 | 假| 带我 | 带我 | 带我 | 带我 | 带我 | | | | | | | | | +----------------+---------------+-------------+-- ------------+--------------+-------------- ----+----------------------------+ | * 文本=自动 | 真实| 带crlf | 带crlf | 带crlf | 带crlf | 带crlf | | | | | | | | | +----------------+---------------+-------------+-- ------------+--------------+-------------- ----+----------------------------+ | * 文本=自动 | 假| 带我 | 带我 | 带我 | 带crlf | 带crlf | | | | | | | | | +----------------+---------------+-------------+-- ------------+--------------+-------------- ----+----------------------------+ | * 文本=自动 | 真实| 带crlf | 带crlf | 带crlf | 带crlf | 带crlf | | 测试文本 | | | | | | | | | | | | | | | +----------------+---------------+-------------+-- ------------+--------------+-------------- ----+----------------------------+ | * 文本=自动 | 假| 带我 | 带我 | 带我 | 带crlf | 带crlf | | 测试文本 | | | | | | | | | | | | | | | +----------------+---------------+-------------+-- ------------+--------------+-------------- ----+----------------------------+
如您所见,在 Linux 上core.autocrlf,即使存在.gitattributes文件,这些设置似乎也有效。
我需要一些帮助来确定这是否真的是一个错误。
看来误解来自于将文本属性解释为与 autocrlf 配置设置相同的含义。
\n来自gitattributes文档(https://git-scm.com/docs/gitattributes):
\n\n该属性启用并控制行尾标准化。当文本文件被规范化时,其行结尾在存储库中被转换为 LF。要控制工作目录中使用的行结束样式,请对单个文件使用 eol 属性,对所有文本文件使用 core.eol 配置变量。请注意 core.autocrlf 会覆盖 core.eol
\n
(强调是添加的。)
\n因此,如果您想使用属性来控制工作树中的行结尾,则需要设置 eol 属性(而不仅仅是文本属性)。
\n事实上,有几个属性和几个配置选项涉及如何处理行结尾,并且Windows 和 *nix 之间的默认行为存在差异(根据设计)。来自git config文档(https://git-scm.com/docs/git-config):
\n\n核心文件
\n设置当 core.autocrlf 为 false 时设置了 text 属性的文件在工作目录中使用的行结束类型。替代方案是 lf、crlf 和 native,它们使用 platform\xe2\x80\x99s 本机行结尾。默认值是本机
\n
因此,回答您的问题:不,您所描述的不是错误。
\n