最近,我在.gitattributes文件中遇到了以下条目:
"* text=auto !eol"
!eol
做了什么?
答案 0 :(得分:16)
Git有两个处理行尾的属性:
文档说:
此属性启用和控制行尾标准化。对文本文件进行规范化后,其行结尾将转换为存储库中的LF
这实际上意味着当你提交回购时,它会将行结尾转换为LF
文档说:
此属性设置要在工作目录中使用的特定行结束样式。它可以在没有任何内容检查的情况下实现行尾规范化,有效地设置文本属性。
因此,虽然 text 属性会影响文件在“重播”中的显示方式,但eol
会影响文件在工作目录中的显示方式。
现在,属性可以有4种状态:
设置为无值
例如:* text
未设置
例如:* -text
设置具体值
例如:* text=auto
未指定
例如:* !text
所以,* text=auto !eol
意味着:
所有文件的属性文本都设置为auto,eol属性未指定。阅读文档,我们发现text = auto意味着你让git决定文件是否是文本,如果它是正常化它(将repo中的行结束设置为LF)。
!eol
表示属性eol设置为未明确指定。在这种情况下,它完全没有指定它,指示Git查看core.eol配置设置,以了解如何处理工作目录中的行结尾。请注意:
core.eol配置变量控制Git将用于工作目录中规范化文件的行结尾;默认设置是使用您平台的本机行结束,如果设置了core.autocrlf,则使用CRLF。
但你会在以下情况下使用!eol:
* text=auto eol=CRLF
test.txt !eol
基本上覆盖了来自 CRLF 的eol属性到未指定的test.txt。这意味着对于除test.txt之外的所有文件,Git会将checkout EOL转换为CRLF,但不会对test.txt执行任何操作。
答案 1 :(得分:5)
* text=auto !eol
意味着:
答案 2 :(得分:3)
eol
有时您需要覆盖a的属性设置 未指定状态的路径。这可以通过列出的名称来完成 带有感叹号前缀的属性!。
eol
执行以下操作:
此属性设置要在其中使用的特定行结束样式 工作的 目录。它可以在没有任何内容的情况下实现行尾标准化 检查,有效地设置文本属性。
答案 3 :(得分:2)
简短版本:
如果Git决定内容是文本,则在签入时其行结尾将标准化为LF。 在某些嵌套的.gitattributes文件中恢复任何显式的eol设置。
请参阅man gitattributes
:
Each line in gitattributes file is of form:
pattern attr1 attr2 ...
Sometimes you would need to override an setting of an attribute for a path to
Unspecified state. This can be done by listing the name of the attribute
prefixed with an exclamation point !.
text
This attribute enables and controls end-of-line normalization. When a text
file is normalized, its line endings are converted to LF in the
repository. To control what line ending style is used in the working
directory, use the eol attribute for a single file and the core.eol
configuration variable for all text files.
Set to string value "auto"
When text is set to "auto", the path is marked for automatic
end-of-line normalization. If Git decides that the content is text,
its line endings are normalized to LF on checkin.
eol
This attribute sets a specific line-ending style to be used in the working
directory. It enables end-of-line normalization without any content
checks, effectively setting the text attribute.