在为项目设置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>
(检查工作树中的行尾)
+ ---------------- + --------------- + ------------- +- ------------ + -------------- + ---------------------- ---- + -------------------------- +
| .gitattributes | 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 |
| | | | | | | |
+ ---------------- + --------------- + ------------- +- ------------ + -------------- + ---------------------- ---- + -------------------------- +
|无|真实| w / crlf | w / crlf | w / crlf | w / crlf | w / crlf |
| | | | | | | |
+ ---------------- + --------------- + ------------- +- ------------ + -------------- + ---------------------- ---- + -------------------------- +
|无|错误w / lf | w / lf | w / lf | w / lf | w / lf |
| | | | | | | |
+ ---------------- + --------------- + ------------- +- ------------ + -------------- + ---------------------- ---- + -------------------------- +
| * text = auto |真实| w / crlf | w / crlf | w / crlf | w / crlf | w / crlf |
| | | | | | | |
+ ---------------- + --------------- + ------------- +- ------------ + -------------- + ---------------------- ---- + -------------------------- +
| * text = auto |错误w / lf | w / lf | w / lf | w / crlf | w / crlf |
| | | | | | | |
+ ---------------- + --------------- + ------------- +- ------------ + -------------- + ---------------------- ---- + -------------------------- +
| * text = auto |真实| w / crlf | w / crlf | w / crlf | w / crlf | w / crlf |
|测试文字| | | | | | |
| | | | | | | |
+ ---------------- + --------------- + ------------- +- ------------ + -------------- + ---------------------- ---- + -------------------------- +
| * text = auto |错误w / lf | w / lf | w / lf | w / crlf | w / crlf |
|测试文字| | | | | | |
| | | | | | | |
+ ---------------- + --------------- + ------------- +- ------------ + -------------- + ---------------------- ---- + -------------------------- +
如您所见,在Linux上,即使存在core.autocrlf
文件,.gitattributes
设置似乎也有效。
我需要一些帮助来确定这是否实际上是一个错误。
最佳答案
似乎误解是因为将text属性解释为与autocrlf config设置含义相同。
从gitattributes
文档(https://git-scm.com/docs/gitattributes):
此属性启用并控制行尾标准化。对文本文件进行规范化后,其行尾将在存储库中转换为LF。要控制工作目录中使用的行尾样式,请对单个文件使用eol属性,对所有文本文件使用core.eol配置变量。请注意,core.autocrlf会覆盖core.eol
(已添加重点。)
因此,如果您想使用属性来控制在工作树中获得的行尾,则需要设置eol属性(而不仅仅是文本属性)。
实际上,行尾的处理方式涉及几个属性和几个配置选项,并且Windows和* nix之间的默认行为有所不同(根据设计)。从git config
文档(https://git-scm.com/docs/git-config):
核心
设置要在工作目录中使用的行结尾类型,以用于在core.autocrlf为false时设置了text属性的文件。可以选择lf,crlf和native,它们使用平台的本机行尾。默认值为本地
因此,回答您的问题:不,您所描述的不是错误。
关于git - 为什么.gitattributes不能覆盖Linux上的core.autocrlf配置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49150892/