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