为什么不是’;t eol=crlf在.gittattributes中

为什么不是’;t eol=crlf在.gittattributes中,git,Git,所以我决定在我们的git repo中将所有具有windows样式的行结尾的文件转换为具有unix样式的行结尾 我按照以下指示行事: 我后来意识到,这也改变了*.bat文件,该文件应保留为CRLF。我使用以下.gittributes文件再次尝试了整个过程: # Default * text=auto eol=lf # Windows-only files *.bat text eol=crlf 这似乎没有改变git status的输出,批处理文件仍然标记为“已更改”,

所以我决定在我们的git repo中将所有具有windows样式的行结尾的文件转换为具有unix样式的行结尾

我按照以下指示行事:

我后来意识到,这也改变了*.bat文件,该文件应保留为CRLF。我使用以下
.gittributes
文件再次尝试了整个过程:

# Default 
*         text=auto eol=lf

# Windows-only files
*.bat     text eol=crlf
这似乎没有改变
git status
的输出,批处理文件仍然标记为“已更改”,即使它们在我的工作副本中是CRLF,并且
.gittributes
将它们设置为正是这样。git似乎会忽略带有
*.bat
的行
git show--raw
也向我显示了文件现在是用LF而不是CRLF存储的。

经过几个小时的尝试(并且失败)找到了一个关于
格式的好规范。gittattributes
我决定尝试以下方法(注意,这不是解决问题的正确方法):

瞧,批处理文件从
git status
中消失了,这表明文件的语法没有问题,正如我最初假设的那样。虽然我不想将批处理文件视为二进制文件,但这让我得出了我现在认为是正确的结论:

我误解了git在使用
text
属性标记文件时的实际操作。它始终在内部存储以LF行结尾的文件,并且仅在签出时转换为CRLF。所以,我最初的步骤是完全正确的,它们只是产生了让我困惑的输出,让我觉得有些事情不对。档案实际上已经改变了;以前它们是用CRLF存储的,但现在它们将只存储LF行结束符,这将在签出时更正

# Default 
*         text=auto eol=lf

# Windows-only files
*.bat     text eol=crlf
*.bat     -text