В порядке ли строки CRLF в проекте Rails, развернутом в Linux?

StackOverflow https://stackoverflow.com/questions/446244

Вопрос

У меня есть 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

хотя, вероятно, еще есть какой-то угловой случай, который потерпит неудачу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top