【问题标题】:Force LF line endings using .gitattributes without losing automatic text/binary inference?使用 .gitattributes 强制 LF 行结尾而不丢失自动文本/二进制推断?
【发布时间】:2014-11-22 10:08:36
【问题描述】:

我想在我的 .gitattributes 文件中使用 eol=LF,但我希望它应用于 Git 自动确定为文本文件的文件。

我能找到的最好方法是将特定的文件扩展名/glob 定义为文本或二进制文件。这并不理想,因为列表可能很大。我试过* text=auto eol=LF,但eol=LF 部分似乎覆盖了auto 部分。

我可以在不需要特定 git config 设置且不丢失自动文本/二进制推断的情况下强制换行吗?

【问题讨论】:

    标签: git newline


    【解决方案1】:

    存储库级 git 属性: (Where should I place my global 'gitattributes' file?)

    -在其中创建一个文件 .git/info/attributes: * 文本=自动

    -对于每个修改过的文件,在执行 git add * 时,现在应该会被警告 “该文件将在您的工作目录中以原始行结尾”

    【讨论】:

      【解决方案2】:

      更新:@romkyns 发表评论后,我重新检查了所有内容,发现我的解决方案有点不正确。正确的是具有以下内容的.gitattributes-文件:

      * text=auto
      

      根据documentation这可确保 Git 认为是文本的所有文件在存储库中都将具有规范化 (LF) 行结尾。


      原答案:

      您想在.gitattributes 中写的内容就这么简单:

      * text=auto
      * text eol=lf
      

      第一行告诉 git 自动检测文件类型(二进制或文本,无论如何这是 git 的默认行为,因此可以省略),第二行用 LF 处理所有检测到的文本文件(并且只有那些)的行尾行尾。

      我用一些混合的二进制内容和一些以 CRLF 结尾的文本文件测试了这个设置,并得到了预期的到 LF 结尾的转换。

      【讨论】:

      • 为什么第二行不把所有东西都写成text?我很惊讶它没有,the documentation 使它看起来像* text 部分“将路径标记为文本文件”。另外,我希望它覆盖任何 git config 设置,即使我像你建议的那样省略第一行也会发生这种情况吗?
      • 你是完全正确的 - 毕竟找到了解决方案。第一行足以满足您的要求。至于您的其他问题,存储库设置会覆盖用户设置,这会覆盖系统设置:请参阅git-scm.com/book/tr/v2/…
      • 我想我们会选择* text=auto。我确实想知道如何在指定 text=auto 的同时在必要时指定 eol 选项,但我意识到我在最初的问题中没有问过这个问题。
      • 我认为这不是完整的答案。 * text=auto 仍将 Linux 文件结尾转换为 Windows 上的 CRLF。问题是如何强制 eol=LF 这意味着在 Windows 上的文件也应该以 LF 文件结尾签出。
      • 我相信* text=auto 已经是不使用.gitattributes 文件时的默认值。当 autocrlf 设置不当时,此解决方案在 Windows 上不起作用。
      【解决方案3】:

      我建议三种解决方案:

      方法 1
      我假设您的大多数工作目录文件都是文本文件。因此,为每种文本文件类型添加特定的行会浪费大量时间。

      您可以在.gitattributes 文件中为binary 文件提供unset text 属性。由于只有几种binary文件类型,这样做并不繁琐。

      方法 2
      我认为您的主要关注点是禁用全局 eol=lf 设置。根据.gitattributes 的优先级,您可以在$GIT_DIR/info/attributes 中配置优先级最高的text=auto。同时,它只影响工作树。

      方法 3 从您的工作树中完全删除 .gitattributes。取决于您的文件编辑器进行行尾转换。我推荐 Notepad++,它可以方便地在 Unix 风格和 Windows 风格之间进行 EOL 转换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多