gitattributes中的"!eol"有什么作用?

use*_*810 22 git line-endings eol gitattributes

最近我在.gitattributes文件中遇到了以下条目:

"* text=auto !eol"

怎么!eol办?

and*_*rea 16

Git有2个属性来处理行尾:

  1. 文本

文件说:

此属性启用并控制行尾标准化.对文本文件进行规范化后,其行结尾将在存储库中转换为LF

这实际上意味着当您提交回购时,它会将行结尾转换为LF

  1. EOL

文件说:

此属性设置要在工作目录中使用的特定行结束样式.它可以在没有任何内容检查的情况下实现行尾标准化,从而有效地设置文本属性.

因此,虽然text属性会影响文件在IN REPO中的外观,但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
Run Code Online (Sandbox Code Playgroud)

基本上覆盖了从CRLF未指定 test.txt 的eol属性.这意味着,对于除test.txt的所有文件,Git会在结账EOLS转换成CRLF,但不会做任何事情来TEST.TXT.


dev*_*ull 6

* text=auto !eol
Run Code Online (Sandbox Code Playgroud)

暗示:

  • 不会对二进制文件执行EOL(行尾)转换.
  • 对于文本文件,EOL在检出文件时转换为依赖于操作系统的EOL(对于Unix转换为LF,对于Windows转换为CR + LF),并在检入时替换为LF.


Agi*_*gis 4

eol它基本上根据文档禁用:

有时,您需要覆盖通往“未指定”状态的路径的属性设置。这可以通过列出带有感叹号前缀的属性名称来完成!

eol执行以下操作:

此属性设置要在工作目录中使用的特定行结束样式。它无需任何内容检查即可实现行尾标准化,从而有效地设置文本属性。