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

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

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, когда я запускаю команду GIT в cmd, я получаю:

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

    так что CLRF не имеет значения true, так почему же окончания строк CRLF?


person Marcin Nabiałek    schedule 07.01.2015    source источник


Ответы (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. Преимущество настройки для каждого репозитория заключается в том, что каждый пользователь, который извлекает данные из вашего репозитория, имеет одинаковые настройки окончания строки.

Поскольку любой хороший редактор 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.

Почему расстояние равно LF

Zip-архив скачивается и распаковывается. Никакие действия git не выполняются, перевод строки получается, как указано в репозитории/zip.

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

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

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

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

person Pᴇʜ    schedule 08.01.2015
comment
Но почему окончания строк CLRF, когда у меня есть core.autocrlf=false ? Разве они не должны быть точно такими же, как в репозитории? А для редактирования файлов позже использую PhpStorm - person Marcin Nabiałek; 08.01.2015
comment
Спасибо, теперь стало намного понятнее. Есть ли способ заставить GIT на моем ПК всегда использовать каналы LF вместо CRLF? Если у вас есть время, вы также можете посмотреть stackoverflow.com/questions/27730350/ - person Marcin Nabiałek; 08.01.2015
comment
да, как я писал в своем первоначальном ответе, используйте: git config --global core.autocrlf input - person Pᴇʜ; 08.01.2015