【问题标题】:How to let git reject any eol style change?如何让 git 拒绝任何 eol 样式更改?
【发布时间】:2013-10-09 02:17:13
【问题描述】:

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

【问题讨论】:

    标签: git eol


    【解决方案1】:

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

    如果你有core.autocrlf set to false,git 不会在任何时候尝试转换任何东西。

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

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


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

    您可以在.gitattributes files 中注册您想要的eol(针对特定类型的文件),使用eol 指令:

    text
    

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

    eol
    

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

    设置为字符串值“crlf

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

    设置为字符串值“lf

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

    例如:

    *.sh        eol=lf
    

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

    【讨论】:

    • 谢谢。但我不想要任何规范化。我只需要强制提交者遵守作者选择的原始 eol 样式。也就是说,既不允许将\n 转换为\r\n,也不允许将\r\n 转换为\n。但我不在乎原来的eol风格是什么。
    • @AlvinCao Git 不记得提交者最初开始修改文件时在文件中使用了什么 eol:它只能在提交时强制执行一种样式,并且该样式不能是“无论使用什么结帐”,因为 Git 永远不会在任何地方记住这些特定信息。
    • @AlvinCao 我已经编辑了我的答案以考虑您的评论。
    猜你喜欢
    • 2013-01-07
    • 1970-01-01
    • 2021-12-25
    • 2010-12-07
    • 1970-01-01
    • 2013-02-16
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多