行尾转换如何在不同操作系统之间使用git core.autocrlf
我已经阅读了许多关于堆栈溢出的不同问题和答案,以及关于core.autocrlf设置如何工作的git文档 这是我读到的理解: Unix和Mac OSX(OSX之前使用CR)客户端使用LF行结尾。行尾转换如何在不同操作系统之间使用git core.autocrlf,git,newline,core.autocrlf,Git,Newline,Core.autocrlf,我已经阅读了许多关于堆栈溢出的不同问题和答案,以及关于core.autocrlf设置如何工作的git文档 这是我读到的理解: Unix和Mac OSX(OSX之前使用CR)客户端使用LF行结尾。 Windows客户端使用CRLF行结尾 当客户机上的core.autocrlf设置为true时,git存储库始终以LF行结束格式存储文件,对于使用非LF行结束的客户机(即Windows),客户机上文件中的行结束在签出/提交时来回转换,无论行结束文件在客户机上的格式如何(这与Tim Clem的定义不一致—
Windows客户端使用CRLF行结尾 当客户机上的core.autocrlf设置为true时,git存储库始终以LF行结束格式存储文件,对于使用非LF行结束的客户机(即Windows),客户机上文件中的行结束在签出/提交时来回转换,无论行结束文件在客户机上的格式如何(这与Tim Clem的定义不一致——见下文更新) 下面是一个矩阵,它试图用问号记录core.autocrlf的“输入”和“假”设置,我不确定行结束转换行为 我的问题是:
将Tim的文章与jmlane迄今为止投票率最高的答案进行比较,可以看出在真设置和输入设置上完全一致,而在假设置上则不一致。在“eol转换”方面,情况即将发生变化,如下所示: 新的配置设置: 这是“添加”
core.eol
“配置变量”提交的替代品,当前位于pu
(我系列中的最后一个)。与其暗示“
core.autocrlf=true
”是“*text=auto
”的替代品,相反,它明确表明了这样一个事实:autocrlf
仅适用于希望使用它的用户
CRLF位于没有文本的存储库上的工作目录中
文件规范化启用时,“core.eol”被忽略 引入一个新的配置变量“
core.eol
”,该变量允许用户设置工作目录中的行尾规范化文件要使用的行尾。它默认为“
native
”,这意味着Windows上的CRLF和其他地方的LF。
请注意,“core.autocrlf
”覆盖core.eol
这意味着:
[core]
autocrlf = true
即使core.eol
设置为“lf
”,也会将CRLF置于工作目录中
设置要在工作目录中为设置了text
属性的文件使用的行尾类型。备选方案有“lf”、“crlf”和“native”,它们使用平台的本机行结尾。
默认值为
native
其他演变:
1.8,我会考虑制作<代码>核心。AutoLoFF <代码>打开正常化并离开T。
core.eol:
CRLF_GUESS && core.autocrlf=true -> CRLF_AUTO_CRLF
CRLF_GUESS && core.autocrlf=false -> CRLF_BINARY
CRLF_GUESS && core.autocrlf=input -> CRLF_AUTO_INPUT
- CRLF_UNDEFINED : No attributes set. Temparally used, until core.autocrlf
and core.eol is evaluated and one of CRLF_BINARY,
CRLF_AUTO_INPUT or CRLF_AUTO_CRLF is selected
- CRLF_BINARY : No processing of line endings.
- CRLF_TEXT : attribute "text" is set, line endings are processed.
- CRLF_TEXT_INPUT: attribute "input" or "eol=lf" is set. This implies text.
- CRLF_TEXT_CRLF : attribute "eol=crlf" is set. This implies text.
- CRLF_AUTO : attribute "auto" is set.
- CRLF_AUTO_INPUT: core.autocrlf=input (no attributes)
- CRLF_AUTO_CRLF : core.autocrlf=true (no attributes)
| Resulting conversion when | Resulting conversion when
| committing files with various | checking out FROM repo -
| EOLs INTO repo and | with mixed files in it and
| core.autocrlf value: | core.autocrlf value:
--------------------------------------------------------------------------------
File | true | input | false | true | input | false
--------------------------------------------------------------------------------
Windows-CRLF | CRLF -> LF | CRLF -> LF | as-is | as-is | as-is | as-is
Unix -LF | as-is | as-is | as-is | LF -> CRLF | as-is | as-is
Mac -CR | as-is | as-is | as-is | as-is | as-is | as-is
Mixed-CRLF+LF | as-is | as-is | as-is | as-is | as-is | as-is
Mixed-CRLF+LF+CR | as-is | as-is | as-is | as-is | as-is | as-is
╔═══════════════╦══════════════╦══════════════╦══════════════╗
║ core.autocrlf ║ false ║ input ║ true ║
╠═══════════════╬══════════════╬══════════════╬══════════════╣
║ ║ LF => LF ║ LF => LF ║ LF => LF ║
║ git commit ║ CR => CR ║ CR => CR ║ CR => CR ║
║ ║ CRLF => CRLF ║ CRLF => LF ║ CRLF => LF ║
╠═══════════════╬══════════════╬══════════════╬══════════════╣
║ ║ LF => LF ║ LF => LF ║ LF => CRLF ║
║ git checkout ║ CR => CR ║ CR => CR ║ CR => CR ║
║ ║ CRLF => CRLF ║ CRLF => CRLF ║ CRLF => CRLF ║
╚═══════════════╩══════════════╩══════════════╩══════════════╝
commit core.autocrlf false, remove, checkout core.autocrlf false: LF=>LF CRLF=>CRLF
commit core.autocrlf false, remove, checkout core.autocrlf input: LF=>LF CRLF=>CRLF
commit core.autocrlf false, remove, checkout core.autocrlf true : LF=>LF CRLF=>CRLF
commit core.autocrlf input, remove, checkout core.autocrlf false: LF=>LF CRLF=>LF
commit core.autocrlf input, remove, checkout core.autocrlf input: LF=>LF CRLF=>LF
commit core.autocrlf input, remove, checkout core.autocrlf true : LF=>CRLF CRLF=>CRLF
commit core.autocrlf true, remove, checkout core.autocrlf false: LF=>LF CRLF=>LF
commit core.autocrlf true, remove, checkout core.autocrlf input: LF=>LF CRLF=>LF
commit core.autocrlf true, remove, checkout core.autocrlf true : LF=>CRLF CRLF=>CRLF