我使用 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)行结尾。
问题:
为什么?它与 GIT 有什么共同之处吗?我想在文件中有原始分隔符(与包装师相同)并且不被修改
如果它与 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的默认设置。