У меня есть репозиторий Git (первоначально CVS, затем SVN, теперь Git), содержащий проект Rails, который уже давно развернут в Linux. Кажется, все работает нормально.
Теперь, когда я перешел на git, я вижу, что многие из моих файлов в репозитории содержат окончания строк CRLF. Я бы хотел, чтобы все было согласовано (LF), но не за счет потери истории редактирования каждого файла, у которого есть окончания строки CRLF.
Можете ли вы придумать причину, по которой я не могу оставить файлы такими, какие они есть? Кажется, я помню, что была проблема со сценариями оболочки или файлами cron или с чем-то, что не очень хорошо реагировало на CRLF.
Кроме того, я знаю все о параметрах Git core.autocrlf и core.safecrlf, но есть ли способ получить его конвертировать все текстовые файлы из CRLF в LF при оформлении заказа (для Linux) ... т.е. параметр core.autolf или что-то подобное?
Некоторые системы контроля версий (например, Subversion) смотрят на файл, в котором были изменены концы строк, и думают, что каждая строка в файле изменилась.
Такие как подрывная деятельность И Git. Кажется, Git использует только LF внутри, поэтому CR - это просто часть текста, если он изменяется, изменяется строка. Я бы не потерял историю редактирования, но при изменении файла через эту фиксацию изменения строки будет отображаться весь файл как измененный.





Если вы можете переписать историю своего репозитория (см. проблемы с переписыванием истории), вы можете использовать git filter-branch для преобразования CRLF в LF:
git filter-branch --tree-filter 'find . -path './.git' -prune -o -type f -exec dos2unix \{} \;' HEAD
Обратите внимание, что если у вас есть двоичные файлы в вашем репозитории, вам нужно будет уточнить команду find, чтобы исключить их.
Просто попробовал это с помощью dos2unix из пакета Ubuntu tofrodos (версия 1.7.6-2), и он не оставляет двоичные файлы в покое. Поэтому команду find следует усовершенствовать, чтобы исключить двоичные файлы, если они есть в вашем репозитории.
Да, это сработало бы, если бы я смог найти хороший способ убедиться и оставить двоичные файлы в покое.
Похоже, что, по крайней мере, с dos2unix 6, dos2unix будет пропускать двоичные файлы, так что это должно работать.
комментарий к ответу Давитенио и комментарию Дэниела Бердсли; Я считаю, что вы могли бы использовать эту небольшую программу в качестве оболочки для 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
хотя, вероятно, есть еще какой-то угловой случай, который потерпит неудачу.
Я не понимаю, почему вы говорите «потеря [sic] истории редактирования каждого файла с окончанием строки CRLF». Каким образом добавление фиксации, которая делает окончание строк последовательным, может привести к «потере истории изменений»?