【问题标题】:How do I set all files in a subdirectory to use a specific eol using gitattributes?如何使用 gitattributes 将子目录中的所有文件设置为使用特定的 eol?
【发布时间】:2011-07-12 19:47:55
【问题描述】:

我一直在尝试将特定文件设置为始终使用 lf 而不是 crlf,无论本地系统上的 autocrlf 是什么。

我尝试在项目的根目录下创建一个仅包含SquishIt.Tests/js/*.js eol=lf 的 .gitattributes,我还尝试了SquishIt.Tests/js/ eol=lf。我将这两种尝试都推送到了我的遥控器,然后尝试在本地克隆它两次。 /js/ 下的文件在这两种情况下总是显示为 CR+LF,因为 autocrlf 对我来说是全局启用的。

我在一台 Windows 机器上,以防万一不清楚。我正在努力实现的目标是否可能?

【问题讨论】:

    标签: git gitattributes


    【解决方案1】:

    我想让所有文本文件都强制使用 LF,除了一个子目录 (.idea) 强制使用“CRLF”。这就是我的 .gitattributes 的样子:

    * text eol=lf
    /.idea/* text eol=crlf
    

    所以我假设你的应该是这样的:

    * text=auto
    /SquishIt.Tests/js/* text eol=lf
    

    【讨论】:

    • 我恰好是为了这个 .idea 而来到这里 - 如果您添加指向某些文档的链接,我将不胜感激 :) 特别是为什么领先的 / ?还有如何将文件包含在.idea/dictionaries 等子文件夹中
    • 对于第二个问题,您可以简单地使用 /.idea/dictionaries/* 来匹配该子目录中的文件。
    • 如果您想在文件夹和所有子文件夹中包含文件,请使用/.idea/**。如果您想在任何名为 .idea 的子文件夹中包含文件,无论深度如何,请使用 .idea/*
    【解决方案2】:

    我会将 autocrlf 设置为 false 并将 core.whitespace 设置为 cr-at-eol。最好让您的编辑处理行尾的差异。让 git 按原样存储它们。

    希望这会有所帮助。

    【讨论】:

    • 有些单元测试会读回文件的内容,并且无论 autocrlf 设置如何,文件必须在所有平台上保持其规范化的行结尾,以正确确保测试通过。我无法控制贡献者是否有这些设置。
    • 让测试更有弹性。我不希望 vcs 之类的东西干扰文件包含的内容。
    • 谢谢,我找到了一种让测试更有弹性的方法,而不必再担心 vcs。对于那些感兴趣的人,我基本上是读入文件,规范化行尾,并重写文件以保证它具有正确的行尾。
    • 请不要接受此回复作为答案,因为它没有回答您的问题。在某些情况下,您绝对希望控制子目录上的行尾。例如,我的应用程序中包含一个 puppet 项目,该项目必须对其所有文件都有 LF 行结尾,否则它将中断。
    • 另一个有效用例:我的 Windows 操作系统上有一个与 Linux VM 共享的存储库文件夹。此文件夹中包含供 Linux 来宾运行的 shell 脚本。我需要 git 来检查 Linux EOL 而不是默认的 Windows EOL。
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    相关资源
    最近更新 更多