3

有时人们在提交代码时无意中改变了 eol 样式。如何让 git 阻止他们这样做?我搜索了这个主题,发现大多数答案都集中在如何将文件转换为特定的 eol 样式。但我不想要这种行为。我只是希望提交者遵守原始文件的 eol 样式,\n 或 \r\n。git能做到吗?

4

1 回答 1

2

我只需要强制提交者遵守作者选择的原始 eol 样式。也就是说,既不允许将\n 转换为\r\n,也不允许将\r\n 转换为\n。但我不在乎原来的eol风格是什么

如果你core.autocrlf设置为false,git 不会在任何时候尝试转换任何东西。

但这也意味着用户编辑器可以在 Git 不知情的情况下更改 eol:Git 在结账时不会记住 eol。
这意味着它将检查用户已修改的任何内容(包括 eol 更改)。

可以尝试一个负责为您记住该信息的post-checkout钩子,但这似乎有点矫枉过正。正如本答案的下一部分所示,
我更喜欢为文件中的某些类型的文件注册规范化。.gitattributes


原始答案,说明 Git在提交时可以强制执行的操作:

您可以使用 eol 指令在.gitattributesfiles中注册所需的 eol(对于特定类型的文件):

text

此属性启用和控制行尾标准化。
当一个文本文件被规范化时,它的行尾在存储库中被转换为 LF。要控制工作目录中使用的
行尾样式,请使用单个文件的属性和所有文本文件的配置变量eolcore.eol

eol

此属性设置要在工作目录中使用的特定行尾样式。
它无需任何内容检查即可启用行尾规范化,从而有效地设置文本属性。

设置为字符串值“ crlf

此设置强制 Git 在签入时规范化此文件的行尾,并将其转换为CRLF文件签出时的行尾。

设置为字符串值“ lf

此设置强制 Git 将行尾规范化为LF签入时,并防止转换CRLF为签出文件时。

例如:

*.sh        eol=lf

.gitattributes文件中注册这些指令的好处在于它将在存储库克隆中保持不变

于 2013-10-09T05:30:04.817 回答