В порядке ли строки CRLF в проекте Rails, развернутом в Linux?
-
22-07-2019 - |
Вопрос
У меня есть Git-репозиторий (первоначально CVS, затем SVN, теперь Git), содержащий проект Rails, который уже некоторое время развертывается в Linux. Кажется, все работает нормально.
Теперь, когда я перешел в git, я вижу, что многие из моих файлов в хранилище содержат CRLF
окончания строк . Я бы хотел, чтобы все было согласованно ( LF
), но не за счет потери истории редактирования каждого файла, который имеет CRLF
окончания строк.
Можете ли вы вспомнить причину, по которой я не могу оставить файлы такими, какие они есть? Кажется, я помню, что была проблема со сценариями оболочки или файлами cron или чем-то, что не отвечало на < code> CRLF очень хорошо.
Кроме того, я знаю все о параметрах Git core.autocrlf
и core.safecrlf
, но есть ли способ преобразовать все текстовые файлы из CRLF
до LF
при оформлении заказа (для стороны linux) ... то есть опция core.autolf или что-то подобное?
Решение
Если вы можете переписать историю своего хранилища (см. проблемы с переписыванием истории ) вы можете использовать git filter-branch для преобразования CRLF в LF:
git filter-branch --tree-filter 'find . -path './.git' -prune -o -type f -exec dos2unix \{} \;' HEAD
Обратите внимание, что если в вашем хранилище есть бинарные файлы, вам нужно будет уточнить команду find, чтобы исключить их.
Другие советы
комментарий к ответу Давитенио и комментарий Дэниела Бердсли; Я полагаю, что вы могли бы использовать эту маленькую программу как оболочку для dos2unix:
#!/bin/sh
for f in $@; do
if [ $(file -b -n -i -m /dev/null $f | grep -c "text") -gt 0 ]; then
dos2unix $f
fi
done
хотя, вероятно, еще есть какой-то угловой случай, который потерпит неудачу.