【问题标题】:How to to disable Git end-of-line (CRLF to LF) across all clones/machines?如何在所有克隆/机器上禁用 Git 行尾(CRLF 到 LF)?
【发布时间】:2012-04-13 13:12:08
【问题描述】:

正如我们所见,fromotherposts,Git 的行尾标准化有其优点和缺点。我有一个特定的仅限 Windows 的项目,我认为最好的办法是完全禁用行尾标准化。也就是说,我想保留所有换行符(其中大部分是CRLF)完好无损,而不是让 git 将它们规范化为 LF-only 在幕后,我希望该更改能够影响存储库的所有克隆机器。提问是最有效的方法。

大多数关于 Git 行尾规范化的讨论都是在 core.autocrlf 方面进行的,我可以通过设置 core.autocrlf=false 来实现我的目标。但是,这是一个 git-config 设置,我相信必须在每台机器上单独设置它。如果为真,那似乎很容易出错,尤其是因为msysgit 安装程序会引导用户设置core.autocrlf=true

【问题讨论】:

    标签: git newline gitattributes core.autocrlf


    【解决方案1】:

    避免在每台机器上单独设置core.autocrlf 的最佳方法似乎是将.gitattributes 文件检查到包含单行的存储库中

    * -text
    

    或者,如果你有旧版本的 Git,那么

    * -crlf
    

    这告诉 Git,对于所有路径(因此是 *),不应尝试行尾规范化。据我所知,这不应该有任何其他副作用。特别是,它不应该改变差异的生成方式(这有单独的属性diff/-diff)或合并的处理方式(这有单独的属性merge/-merge)。

    有关更多详细信息,我建议使用以下资源:

    1. gitattributes 文档(git help attributesan online copy),详细描述了行尾标准化的工作原理以及不同属性的特定效果。 (可能最相关的是textcrlfdiffmergebinary。)
    2. Git 邮件列表线程 Is the "text" attribute meant only to specify end-of-line normalization behavior, or does it have broader implications?(2012 年 3 月 30 日),它扩展了不同属性的含义,并澄清了 -text 并不简单地表示“这是一个二进制文件”。

    【讨论】:

    • 您帖子中的链接已失效。也许你可以改用这个? git.661346.n2.nabble.com/…
    • 使用core.autocrlf=true(默认),Git 不会在结账时修改行尾吗?哪个之前甚至可以读取.gitattributes? (.gitattributes 本身将具有 CRLF)。然后,在提交时,Git 被告知不要转换 CRLF (-text),所以你最终会在你的 repo 中使用 CRLF?
    • @MichelJung git 可以在从远程存储库中提取 .gitattributes 之后,但在文件签出之前从本地存储库中读取。本地存储库的行尾应与远程存储库匹配。只有在签出文件并将它们重新提交时,才会执行行结束转换。
    猜你喜欢
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2010-09-06
    • 2011-07-30
    相关资源
    最近更新 更多