Разделители строк при использовании composer / GIT

0

Я создал образец проекта laravel, используя две разные команды (в Windows 8):

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

а также

composer create-project laravel/laravel l5linefeed2 dev-develop

Речь идет о разделителях строк - в файлах 1-го случая есть окончания строк Unix (LF), но во втором случае файлы имеют окончания строки Windows (CRLF).

Вопросов:

  1. Почему это? У него есть что-то общее с GIT? Я хотел бы иметь в файлах оригинальные разделители (то же самое, что и в packagist) и не изменять

  2. Если у него есть что-то общее с Fit, когда я запускаю команду GIT в cmd, я получаю:

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

    поэтому CLRF не установлен в true, поэтому почему окончанием строки является CRLF?

Теги:
newline
composer-php
core.autocrlf

1 ответ

1

Я могу подтвердить, что это связано с GIT.

Вы можете установить git config --global core.autocrlf input чтобы преобразовать все CRLF в LF при совершении.

Это означает, что Git будет обрабатывать все текстовые файлы и следить за тем, чтобы CRLF был заменен LF при записи этого файла в базу данных объектов. Однако он не будет делать обратного. Когда вы читаете файлы из базы данных объектов и записываете их в рабочий каталог, они все равно будут иметь LF для обозначения конца строки. Этот параметр обычно используется в Unix/Linux/OS X для предотвращения записи CRLF в репозиторий. Идея состоит в том, что если вы вставили код из веб-браузера и случайно получили CRLF в один из ваших файлов, Git удостоверился, что они были заменены LF, когда вы написали в базу данных объектов.

Существует также параметр для каждого репозитория, где вы можете объявлять окончания строк для определенных файлов. Поэтому в вашем репо должен быть создан файл .gitattributes. Для некоторых примеров см. Https://help.github.com/articles/dealing-with-line-endings/#per-repository-settings. Преимущество настройки для каждого репозитория заключается в том, что каждый пользователь, который извлекает из вашего репо, имеет одинаковые параметры завершения строки.

Поскольку любой хороший редактор окон должен поддерживать как CRLF, так и LF, я не вижу проблем с использованием только LF.

Разница между источником и источником

Выполнить 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-операций не выполняется, если линия-канал получен в соответствии с условиями repo/zip.

Почему источником является CRLF

Репозиторий git клонируется и выгружается из github. В репозитории laravel есть файл .gitattributes содержащий

* text=auto
  • Примечание: .gitattributes имеет более высокий приоритет, чем git config

* text=auto сделает Git обрабатывать файлы любым способом, который, по его мнению, является лучшим. Теперь вы находитесь в Windows, и Git считает, что лучше всего изменить его на CRLF, поскольку это по умолчанию для Windows, я думаю.

  • 0
    Но почему окончание строк CLRF, когда у меня core.autocrlf=false ? Разве они не должны быть такими же, как в хранилище? А для редактирования файлов позже я использую PhpStorm
  • 0
    Я отредактировал свой ответ, чтобы прояснить ситуацию.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню