Мерзавец и CR против LF (но НЕ CRLF)
Это может звучать как избыточный вопрос (и вполне может быть избыточным вопросом), но я не могу найти ответ. Вот ситуация:
Мое приложение создает текстовые файлы, которые имеют CR как окончание строки. Точнее говоря, я не устанавливаю окончание строки в CR, это просто вывод команды, которую я использую, чтобы получить текстовое тело. Конечно, я мог бы вручную конвертировать CR в LF, но я не хочу, если смогу избежать этого.
Git рассматривает эти файлы как одну строку (например, во время сравнения). В этом репозитории я определил, что причиной являются строки: https://github.com/jfletcher4d/diff-test
На самом деле мне все равно, какие окончания строк в файловой системе. Это не важно, по крайней мере пока (мне может понадобиться импортировать эти файлы, сейчас это только экспорт). Но я не хочу конвертировать CR в LF в моем приложении, если я могу избежать этого, из соображений производительности, а также из-за анальной сдержанности:) Т.е. это не вопрос того, как создавать текстовые файлы, а, скорее, как заставить каждый текстовый файл в репо иметь только LF.
Можно ли сконфигурировать git для изменения всех концов строк на LF, даже если файлы фиксируются с CR в них?
Я на Windows, использую TortoiseGit и msysgit (и немного TortoiseSVN на стороне) взаимозаменяемо, пока я изучаю git, если это имеет значение.
2 ответа
Git не поддерживает окончание строки CR, поэтому я бы написал фильтр для преобразования строк. Файлы в рабочем дереве будут иметь окончания строки CR, и они будут прозрачно преобразованы в LF, когда они будут проиндексированы. Фильтр состоит из двух частей: "clean" проверяет файлы и "smudge" проверяет файлы.
Используйте это в .git/config
:
[filter "cr"]
clean = tr '\\r' '\\n'
smudge = tr '\\n' '\\r'
А также .git/info/attributes
(или же .gitattributes
если оно должно быть версионным)
* filter=cr
Обратите внимание, что это автоматически делает git-diff
рад, так как будет использовать "чистую" версию.
Просто не забудьте установить в шаблоне только те файлы, которые вам нужны, иначе двоичные файлы будут повреждены, и все текстовые файлы будут проверены с окончанием строки CR.
Также обратите внимание, что если фильтр не настроен, он молча завершится сбоем, поэтому добавьте строку конфигурации при настройке новой копии хранилища.
FWIW, я закончил преобразование концов строки в LF на локальной стороне вещей. В итоге получилось более простое / менее ошибочное решение.