【发布时间】:2014-03-16 08:52:03
【问题描述】:
我试图让 git 不为任何操作更改任何行尾。不幸的是,这似乎无关紧要。我已将其简化为以下测试用例,它有尽可能多的不同机制来禁用此行为。
- 从两台机器开始(Windows 计算机 = A,Linux 计算机 = B)
- 在两台机器上:
git config --global core.autocrlf false - 在两台机器上:
git config --global core.eol crlf(以防万一)
- 在 A 上创建新存储库。从一个空文件夹:
-
git init --shared(然后取消隐藏创建的.git目录) - 在存储库中创建一个新文件
.gitignore - 在存储库中创建一个新文件
.gitattributes,使用一行:* -text -
git add .,然后是git commit -m "initial commit"来解决,例如this。 git branch master_recv- 添加遥控器
-
- 在包含 CRLF 的存储库中创建一个新文件
document.txt - 提交:
git add -A,然后是git commit -m "<something>" - 请注意,A 的
document.txt仍然包含 CRLF(删除它并使用--hard重置会返回仍然带有 CRLF 的版本)
- SCP 整个目录到计算机 B
- 添加一个包含 CRLF 的新文件
new file - 提交:
git add -A,然后是git commit -m "<something>" - 请注意,B 的
document.txt和 B 的new file仍然包含 CRLF
- 将B的master拉到A:
git pull <remote> master:master_recv - A 的
document.txt已更改为 LF。添加的文件new file也包含LF。
如果 B 是 Windows 机器,则不会出现此问题。
【问题讨论】:
-
core.autocrlf总是 是假的吗?听起来您的存储库中已经有\n行尾? no 设置可将存储库中的\n更改为工作目录中的\r\n。 -
它并不总是被设置(例如最初创建 repo 时)。但是,回购中不应该有任何 CR 行结尾。此外,我再次希望发生任何变化。
-
我问是因为您的设置应该将您的行尾保留为 CRLF。您能否在您的存储库中发布一些文件和它的对象 ID 只是为了我(诚然可能很烦人)的启迪?
-
@EdwardThomson 你是什么意思?回购不是公开的(因为 Linux 机器不是)。我假设你想要一个示例文件。见编辑。
-
是的,我同意该文件具有 CRLF 行结尾。您能否澄清一件事:您提到“windows 机器的换行符更改为 CR!”这肯定是一个错字,还是你真的得到了 Mac OS 9 风格的回车行结尾?
标签: git