这本质上是对这里提出的关于配置之间* text=auto
和* text=auto eol=lf
中的区别的问题的后续行动: “* text=auto”和“* text=auto eol=lf”之间的区别是什么?.gitattributes
我想我了解 Git 的工作原理,但我想确认一下,因为文档令人困惑。
此属性启用和控制行尾标准化。当一个文本文件被规范化时,它的行尾在存储库中被转换为 LF。要控制工作目录中使用的行尾样式,请对单个文件使用 eol 属性,对所有文本文件使用 core.eol 配置变量。请注意,将 core.autocrlf 设置为 true 或 input 会覆盖 core.eol(请参阅 git-config [1] 中这些选项的定义)。
因此,如果您使用 Git,这听起来像是LF
默认强制执行* text=auto
,从而变得* text=auto eol=lf
多余。
然而,引用的第二个粗体部分让我感到困惑:Git 是否尊重core.autocrlf
或core.eol
?我使用 PowerShell 和 Git 2.16.1 在 Windows 机器上对此进行了测试:
- 运行
git config --global core.autocrlf false
和git config --global core.eol crlf
。后者不是您通常想要的,但对于这个实验来说,看看 Git 是否完全接受它是很有用的。 - 使用记事本创建具有多行内容的文本文件。该文件应该有
CRLF
行尾。 - 在同一目录中初始化一个 Git 存储库。
- 将文件添加到 Git 的索引中。
- 运行
git ls-files --eol
并观察文件CRLF
在索引和工作树中都有。 - 添加一个
.gitattributes
带有* text = auto
. 提交它。 - 运行
git add --renormalize .
以重新规范化先前提交的文件。 - 运行
git status
。观察该文件已被暂存以供提交。 - 提交文件后,运行
git ls-files --eol
以观察文件现在LF
在索引中使用。
因此,尽管我设置core.eol=crlf
并关闭了core.autocrlf
,Git 仍然强制执行LF
行尾。
问题:文档是否具有误导性?会text=auto
一直强制执行LF
吗?