【问题标题】:Line separators when using composer / GIT使用 composer / GIT 时的行分隔符
【发布时间】:2015-01-07 21:51:18
【问题描述】:

我使用 2 个不同的命令(在 Windows 8 上)创建了示例 laravel 项目:

composer create-project laravel/laravel l5linefeed dev-develop --prefer-dist

composer create-project laravel/laravel l5linefeed2 dev-develop

问题是关于行分隔符 - 在第一种情况下,文件具有 Unix (LF) 行结尾,但在第二种情况下,文件具有 Windows (CRLF) 行结尾。

问题:

  1. 这是为什么呢?它与 GIT 有什么共同之处吗?我想在文件中使用原始分隔符(与 packagegist 中的相同)而不是修改

  2. 如果它与 Fit 有任何共同点,当我在 cmd 中运行 GIT 命令时,我会得到:

    git config --global -l
    
    user.name=xxx
    user.email=xxx@xxx
    core.autocrlf=false 
    

    所以 CLRF 没有设置为 true 那么为什么行尾是 CRLF?

【问题讨论】:

    标签: php git newline composer-php core.autocrlf


    【解决方案1】:

    我可以确认这与 GIT 有关。

    您可以设置git config --global core.autocrlf input 以在提交时将所有CRLF 转换为LF。

    这意味着 Git 将处理所有文本文件,并确保在将该文件写入对象数据库时将 CRLF 替换为 LF。但是,它不会反过来。当您从对象数据库中读回文件并将它们写入工作目录时,它们仍然会有 LF 来表示行尾。此设置通常在 Unix/Linux/OS X 上使用,以防止 CRLF 被写入存储库。这个想法是,如果您从 Web 浏览器粘贴代码并且不小心将 CRLF 放入您的某个文件中,Git 会确保在您写入对象数据库时将它们替换为 LF。

    还有一个 per-repository 设置,您可以在其中声明特定文件的行尾。因此,必须在您的存储库中创建一个 .gitattributes 文件。一些例子见https://help.github.com/articles/dealing-with-line-endings/#per-repository-settings。每个存储库设置的优点是每个从您的存储库中提取的用户都具有相同的行尾设置。

    由于任何好的 Windows 编辑器都应该支持 CRLF 和 LF,我认为只使用 LF 没有问题。

    dist 和 source 的区别

    运行composer show laravel/laravel就可以看到

    source   : [git] https://github.com/laravel/laravel.git 4afcd8c278febbe6840dbf8bbb46514818abce59
    dist     : [zip] https://api.github.com/repos/laravel/laravel/zipball/4afcd8c278febbe6840dbf8bbb46514818abce59 4afcd8c278febbe6840dbf8bbb46514818abce59
    

    composer 选项--prefer-dist 是一个非版本控制的压缩包。大多数情况下,这是比source 更快的方法,并且默认用于稳定版本。

    如果使用--prefer-source,composer 将从 git 存储库中克隆。因为你不是一个稳定的版本,如果你省略--prefer-dist,就会使用source

    为什么dist是LF

    zip 存档已下载并解压缩。没有执行任何 git 操作,获取的是 repo/zip 中提供的换行符。

    为什么来源是 CRLF

    从 github 克隆并签出 git 存储库。 laravel 仓库有一个 .gitattributes 文件,其中包含

    * text=auto
    
    • 注意:.gitattributes 的优先级高于 git config

    * text=auto 将使 Git以它认为最好的方式处理文件。现在您在 Windows 上,Git 认为最好将其更改为 CRLF,因为我认为这是 Windows 的默认设置。

    【讨论】:

    • 但是当我有core.autocrlf=false 时,为什么行尾是CLRF?它们不应该与存储库中的完全相同吗?稍后我使用 PhpStorm 编辑文件
    • 谢谢,现在清楚多了。有什么方法可以强制我的 PC 上的 GIT 始终使用 LF feed 而不是 CRLF ?有空也可以看看stackoverflow.com/questions/27730350/…
    • 是的,正如我在原始答案中所写,使用:git config --global core.autocrlf input
    猜你喜欢
    • 2019-09-30
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    相关资源
    最近更新 更多