有时人们在提交代码时无意中改变了 eol 样式。如何让 git 阻止他们这样做?我搜索了这个主题,发现大多数答案都集中在如何将文件转换为特定的 eol 样式。但我不想要这种行为。我只是希望提交者遵守原始文件的 eol 样式,\n 或 \r\n。git能做到吗?
1 回答
我只需要强制提交者遵守作者选择的原始 eol 样式。也就是说,既不允许将\n 转换为\r\n,也不允许将\r\n 转换为\n。但我不在乎原来的eol风格是什么
如果你core.autocrlf
设置为false
,git 不会在任何时候尝试转换任何东西。
但这也意味着用户编辑器可以在 Git 不知情的情况下更改 eol:Git 在结账时不会记住 eol。
这意味着它将检查用户已修改的任何内容(包括 eol 更改)。
您可以尝试一个负责为您记住该信息的post-checkout
钩子,但这似乎有点矫枉过正。正如本答案的下一部分所示,
我更喜欢为文件中的某些类型的文件注册规范化。.gitattributes
原始答案,说明 Git在提交时可以强制执行的操作:
您可以使用 eol 指令在.gitattributes
files中注册所需的 eol(对于特定类型的文件):
text
此属性启用和控制行尾标准化。
当一个文本文件被规范化时,它的行尾在存储库中被转换为 LF。要控制工作目录中使用的
行尾样式,请使用单个文件的属性和所有文本文件的配置变量。eol
core.eol
eol
此属性设置要在工作目录中使用的特定行尾样式。
它无需任何内容检查即可启用行尾规范化,从而有效地设置文本属性。设置为字符串值“
crlf
”此设置强制 Git 在签入时规范化此文件的行尾,并将其转换为
CRLF
文件签出时的行尾。设置为字符串值“
lf
”此设置强制 Git 将行尾规范化为
LF
签入时,并防止转换CRLF
为签出文件时。
例如:
*.sh eol=lf
在.gitattributes
文件中注册这些指令的好处在于它将在存储库克隆中保持不变。