Git提交文本文件时为何未遵循.gitattribute规则?
为什么Git接受了不符合换行符规则的提交?
这不是Git的bug,是你误解了.gitattributes里eol规则的作用——它的核心是自动转换换行符,而不是阻止提交不符合特定换行符的文件。
具体来说,你设置的*.bat text eol=crlf规则,Git的实际行为是:
- 提交时:不管工作区的bat文件用的是LF还是CRLF,Git都会将其转换为LF存储到仓库中;
- 检出时:从仓库拉取文件到本地工作区时,自动将LF转换为CRLF。
所以你手动把bat文件改成LF后提交,Git会正常将其转成LF存入仓库,这完全符合规则设定。规则并没有限制你工作区的文件必须用CRLF,只是保证最终仓库里的文件是LF,且检出到本地时自动变成CRLF。
如果想要强制工作区的文件必须使用指定的换行符(比如bat文件必须是CRLF),你需要额外配置:
- 用
git diff --check命令手动检查文件中的换行符问题; - 配置pre-commit钩子,在提交前自动校验文件的换行符格式,不符合规则就阻止提交。
内容的提问来源于stack exchange,提问作者tribbloid
相关产品推荐
相关产品推荐

