Как загрузить кулинарные книги шеф-повара в формате Unix в Windows?

Я использую Vagrant, Chef solo и berkshelf для запуска виртуальной машины Linux в Windows 7 с помощью VirtualBox.

Кулинарные книги загружаются из git и поставляются с окончаниями строки Windows. Одним из них является сценарий Perl, который затем загружается в виртуальную машину и выполняется. Однако это не удается, потому что первая строка

#!/usr/bin/perl

и виртуальная машина Linux видит это как команду

#!/usr/bin/perl^M

Как я могу настроить необходимый инструмент (возможно, Chef?) для загрузки файлов .pl в формате Unix?


person paulmorriss    schedule 26.11.2014    source источник


Ответы (2)


Что ж, кажется, уже слишком поздно что-то исправлять с помощью настроек конфигурации.

Алгоритм, используемый git, следующий:

  1. в индексное время git может конвертировать текстовый файл из специфичного для платформы стиля конца строки (например, CRLF в Windows и LF в Linux и Mac, возможно, CR на старых Mac) во "внутреннее представление EOL", которым является LF
  2. при оформлении заказа git преобразует внутреннее представление в EOL для конкретной платформы во всех текстовых файлах.

Параметр, управляющий применением этой логики, называется core.autocrlf

Итак, чтобы окончательно решить проблему, вы должны подготовить свой репозиторий к тому, чтобы он был «кросс-платформенным», то есть переиндексировать файлы во всех (необходимых) коммитах, чтобы они были помещены в индекс как «преобразованные текстовые файлы». Является ли это общедоступным репозиторием, в котором существующие коммиты не должны изменяться или нет? Рецепт, как все исправить, зависит от «гласности».

Вам нужно определиться, что для вас важнее:

  1. вам нужны правильные окончания строк во всех существующих коммитах в репозитории. Однако все существующие коммиты будут перезаписаны, и другим пользователям репозитория придется повторно клонировать его, а затем повторно применить все свои изменения (с множеством тривиальных конфликтов).
  2. вы хотите исправить окончания строк, создав исправления только для верхних коммитов в фактических ветвях. Существующие кассы будут получать новые коммиты, как обычно, и проблем у потенциальных пользователей будет меньше.

Вот рецепт для обоих методов.

person user3159253    schedule 27.11.2014
comment
Это общедоступный репозиторий: github.com/silinternational/addressbook. Но я не хочу, чтобы это была кроссплатформенность. Я хочу, чтобы в Windows использовались окончания LF. - person paulmorriss; 27.11.2014
comment
Извините, это базовое репо. На самом деле это кулинарная книга: github.com/onehealth-cookbooks/apache2. - person paulmorriss; 27.11.2014

Поскольку я не могу изменить репозиторий поваренной книги, я клонировал его локально, а затем добавил файл .gitattributes, содержащий эту строку:

*.pl text eol=lf

Это решило проблему.

person paulmorriss    schedule 01.12.2014