В порядке ли строки CRLF в проекте Rails, развернутом в Linux? - PullRequest
1 голос
/ 15 января 2009

У меня есть Git-репозиторий (первоначально CVS, затем SVN, теперь Git), содержащий проект Rails, который уже некоторое время развертывается в Linux. Кажется, все работает нормально.

Теперь, когда я преобразовал в git, я вижу, что многие из моих файлов в хранилище содержат CRLF окончания строк . Я бы хотел, чтобы все было согласованно (LF), но не за счет потери истории редактирования каждого файла с CRLF окончаниями строк.

Можете ли вы вспомнить причину, по которой я не могу оставить файлы такими, как они есть? Кажется, я помню, что была проблема со сценариями оболочки или файлами cron или чем-то, что не отвечало на CRLF очень хорошо.

Кроме того, я знаю все о параметрах Git core.autocrlf и core.safecrlf, но есть ли способ преобразовать все текстовые файлы из CRLF в LF при извлечении (для стороны linux ) ... то есть опция core.autolf или что-то подобное?

Ответы [ 2 ]

10 голосов
/ 23 января 2009

Если вы можете переписать историю своего репозитория (см. проблемы с переписыванием истории ), вы можете использовать git filter-branch для преобразования CRLF в LF:

git filter-branch --tree-filter 'find . -path './.git' -prune -o -type f -exec dos2unix \{} \;' HEAD

Обратите внимание, что если у вас есть бинарные файлы в вашем хранилище, вам нужно будет уточнить команду find, чтобы исключить их.

1 голос
/ 22 июня 2010

A комментарий к ответу Давитенио и комментарию Дэниела Бердсли; Я полагаю, что вы можете использовать эту маленькую программу в качестве оболочки для 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...