使用作曲家/GIT 时的行分隔符



我使用 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 有什么共同之处吗?我想在文件中有原始分隔符(与包装师相同)并且不被修改

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

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

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

我可以确认这与 GIT 有关。

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

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

还有一个每个存储库设置,您可以在其中声明特定文件的行尾。因此,必须在存储库中创建.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

作曲家选项--prefer-dist是非版本控制的 zip 存档。大多数情况下,这是比稳定版本source和默认值更快的方法。

如果使用--prefer-source作曲家将从 git 存储库克隆。因为您不是稳定版本source所以如果您省略--prefer-dist .

为什么 dist 是 LF

下载并提取 zip 存档。不执行 git 操作,换行符是按照存储库/zip 中提供的获取的。

为什么来源是 CRLF

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

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

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

相关内容

  • 没有找到相关文章

最新更新