Git*text=gitattributes文件中的auto和行结尾



基于这篇文章:在`.gitattributes`文件中`text=auto`的用途是什么?如果在.gitattributes文件中有以下内容,则文本文件的行尾将转换为LF

* text=auto

我刚刚在本地存储库上测试了这个:

$ git add -A
warning: LF will be replaced by CRLF in [bla]/.gitattributes.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in [bla]/.gitignore.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in [bla]/README.md.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in [bla].csproj.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in 

但它说它将转换为CRLF。在上面的帖子中,它说它将转换为LF,而本测试中的情况并非如此。

看来:

* text=auto

将转换为基于操作系统的换行类型(CRLF适用于windows,LF适用于linux)。但这并不是这里所描述的:

https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html

根据以下评论/答案,似乎出现了以下警告:

* text=auto

在.gitattributes文件中:

warning: LF will be replaced by CRLF in [bla]/README.md.
The file will have its original line endings in your working directory.

实际上,这意味着当您执行检查时-out(下次将文件从存储库签出到您的工作目录时),当前以LF结尾的文本文件将被转换为具有CRLF

警告没有

NOT解决检查时行中的将有LF结尾的问题,这就是文档中所说的:

https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html

设置为字符串值"auto"当文本设置为"自动"时,将标记路径以进行自动行尾规范化。如果Git决定内容是文本,那么在签入时,它的行尾将标准化为LF

此消息有点令人困惑。

Git会在任何时候警告你,它不会像你当前的行尾转换设置一样往返你的文件。这个警告并不是因为Git将把CRLF放入存储库(事实并非如此)——这个警告是因为Git要签出的文件与当前磁盘上的文件不同。

无论出于何种原因,工作目录中的文件都有Unix风格的行尾(或者Unix和Windows风格的混合)。您应该能够使用十六进制编辑器看到这一点。例如,我有一个文件的行尾为Unix风格:

C:Temp>hexdump /C foo
00000000  68 65 6c 6c 6f 21 0a                              |hello!.|
00000007

如果我将文件添加到我的存储库(使用* text=autocore.autocrlf=true):

C:Temp>git add foo
warning: LF will be replaced by CRLF in foo.
The file will have its original line endings in your working directory.

正如git所指出的,我当前工作目录中的文件有其原始的(Unix风格)行结尾:

C:Temp>hexdump /C foo
00000000  68 65 6c 6c 6f 21 0a                              |hello!.|
00000007   

但是存储库中的文件也有Unix风格的行结尾:

C:Temp>git ls-files --stage
100644 4effa19f4f75f846c3229b9dbdbad14eff362f32 0       foo
C:Temp>git cat-file blob 4effa19 | hexdump /C
00000000  68 65 6c 6c 6f 21 0a                              |hello!.|
00000007

但是,如果我要求git创建文件内容它将创建一个不同的文件-一个以CRLF行结尾的文件,这就是该警告实际指示的:

C:Temp>del foo
C:Temp>git checkout -f foo
C:Temp>hexdump -C foo
00000000  68 65 6c 6c 6f 21 0d 0a                           |hello!..|
00000008

因此,此消息只是警告您,此文件的下一次签出将与您当前磁盘上的内容不匹配。在这种情况下,这可能是无害的,但如果您添加的文件的行尾配置与其匹配至关重要,那么这将是非常糟糕的。

相关内容

  • 没有找到相关文章

最新更新