Answers:
从文档:
.gitattributes
(或.git/info/attributes
)文件中的每一行都采用以下格式:pattern attr1 attr2 ...
所以这里的模式是*
,表示所有文件,属性是text=auto
。
怎么text=auto
办?从文档中:
当文本设置为“自动”时,将标记该路径以进行行尾自动归一化。如果Git决定内容为文本,则其行尾在签入时被标准化为LF。
如果未启用,默认行为是什么?
未指定
如果未指定text属性,则Git使用core.autocrlf配置变量来确定是否应转换文件。
怎么core.autocrlf
办?从文档:
core.autocrlf
将此变量设置为“ true”与将所有文件上的text属性设置为“ auto”几乎相同,除了不能保证文本文件被标准化:不会触碰存储库中包含CRLF的文件。即使您的存储库中没有标准化的行尾,也要在工作目录中使用CRLF行尾,请使用此设置。可以将此变量设置为输入,在这种情况下,不执行输出转换。
如果您认为这一切都像泥一样清澈,那么您并不孤单。
* text=auto
用我的话来说就是这样:当有人提交文件时,Git会猜测该文件是否为文本文件,如果是,它将提交该文件的版本,其中所有CR + LF字节均被LF字节替换。它不会直接影响工作树中文件的外观,还有其他设置可以在签出文件时将LF字节转换为CR + LF字节。
我不建议把* text=auto
中.gitattributes
文件。相反,我会建议这样的事情:
*.txt text
*.html text
*.css text
*.js text
这明确指定了哪些文件是文本文件,这些文件在对象数据库中(但不一定在工作树中)将CRLF转换为LF。我们使用进行了回购* text=auto
,并且Git猜测图像文件是文本文件是错误的,导致它损坏了它,因为它用对象数据库中的LF字节替换了CR + LF字节。那不是一个好玩的调试程序。
如果必须使用* text=auto
,请将其放在中的第一行.gitattributes
,以便以后的行可以覆盖它。这似乎正在变得越来越流行。
everyone
引用)git-scm
,可能是因为他们正在开发* nix包,因此使用* nix换行符是正常的。
git-scm
来自* nix的工具。MacOS使用LF。只有Windows(仅考虑主流OS)在使用CRLF。这使得开发人员在Windows上使用* nix工具以及在交换文件时的每个人都更加困难。另请参阅为什么选择CRLF。
*.txt text=auto
和*.txt text
好吗?我认为以上示例中的所有4行都应该是text=auto
,而不仅仅是text
文件扩展名之后。例如,KiCad足迹文件(扩展名为“ .kicad_mod”)在其gitattributes文件中使用以下行进行标准化:*.kicad_mod text=auto
(kicad-pcb.org/libraries/klc/G1.7)。
它确保行尾被规范化。资料来源:Kernel.org
当文本设置为“自动”时,将标记该路径以进行行尾自动归一化。如果git决定内容为文本,则其行尾在签入时标准化为LF。
如果要与强制执行行末尾标准化的源代码管理系统进行互操作,或者只是想对存储库中的所有文本文件进行标准化,则应将所有文件的text属性设置为“ auto”。
这样可以确保git认为是文本的所有文件在存储库中均具有规范化(LF)行尾。
When a text file is normalized, its line endings are converted to LF in the repository.
LF
,即使在Windows 上,行尾仍为,是否正确?
该配置是关于如何处理行尾的。启用后,所有行尾都将在存储库中转换为LF。还有其他标志用于处理工作目录中行尾的转换方式。有关此问题的完整信息,请点击此处:https : //www.kernel.org/pub/software/scm/git/docs/gitattributes.html