我试图让git不更改任何操作的任何行尾。不幸的是,这似乎无关紧要。我将其简化为以下测试案例,该案例具有我发现的多种禁用此行为的机制。
- 从两台机器开始(Windows计算机= A,Linux计算机= B)
- 在两台机器上:
git config --global core.autocrlf false - 在两台机器上:(
git config --global core.eol crlf以防万一)
- 在A上新建存储库。从一个空文件夹中:
git init --shared(然后取消隐藏创建的.git目录).gitignore在存储库中创建一个新文件.gitattributes用单行在存储库中创建一个新文件:* -textgit add .,然后再git commit -m "initial commit"解决,例如this。git branch master_recv- 添加遥控器
document.txt在包含CRLF的存储库中制作一个新文件- 提交:
git add -A,然后git commit -m "<something>" - 请注意,A
document.txt仍然包含CRLF(并删除它并用重置会--hard返回仍使用CRLF的版本)
- SCP将整个目录保存到计算机B
- 添加一个
new file包含CRLF 的新文件 - 提交:
git add -A,然后git commit -m "<something>" - 请注意,B
document.txt和Bnew file都仍包含CRLF
- 将B的主人拉到A:
git pull <remote> master:master_recv - A
document.txt已更改为LF。添加的文件new file还包含LF。
如果B是Windows计算机,则不会发生此问题。


core.autocrlf一直以来假的?听起来\n您的存储库中已经有行尾了吗?有没有设置来改变\n在你的仓库到\r\n你的工作目录。