基于这篇文章:在`.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 警告没有
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=auto
或core.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
因此,此消息只是警告您,此文件的下一次签出将与您当前磁盘上的内容不匹配。在这种情况下,这可能是无害的,但如果您添加的文件的行尾配置与其匹配至关重要,那么这将是非常糟糕的。