Android Studio — CRLF против LF для многоплатформенного проекта на основе Git

Я работаю над проектом Android с участием нескольких разработчиков, некоторые из которых работают в Windows, другие в Linux/MacOS. Поскольку я работаю в Windows, мне было приказано настроить Git следующим образом, чтобы избежать проблем:

autocrlf = true
safecrlf = true

Это работает в основном нормально. Любые файлы .java/XML/etc, которые я создаю в Android Studio, находятся в CRLF, преобразуются в LF, когда я помещаю их в репо, а затем обратно в CRLF, когда я вношу изменения в свою локальную копию. Проблема в том, что некоторые типы файлов, такие как векторные ресурсы для рисования, по какой-то причине генерируются в LF. Поэтому, когда я пытаюсь добавить их в Git, я получаю ошибку «необратимое преобразование»:

введите описание изображения здесь Я знаю, что могу установить safecrlf = warn, но насколько я понимаю, это несет в себе риск повреждения двоичных файлов, если Git примет их за текстовые файлы, поэтому я ищу более безопасное решение. На данный момент я вручную редактирую векторные ресурсы в CRLF, прежде чем добавлять их в Git, что позволяет избежать приведенного выше сообщения об ошибке, но становится утомительным повторять процесс для каждого файла. Есть ли способ заставить Android Studio генерировать все локальные файлы в CRLF?


person PM4    schedule 08.07.2017    source источник


Ответы (3)


Я бы не устанавливал core.autocrlf в true (я советую против этого с 2010 года): оставить ложный.

Любой файл, которым вы хотите управлять в .gitattributes файле, особенно начиная с Git 2.10. См. примечание к выпуску.

echo "*.java text=auto eol=crlf" >.gitattributes

Комбинация была исправлена, чтобы быть эквивалентной выполнению

$ git config core.autocrlf true

С помощью .gitattributes вы можете ограничить это преобразование eol точным набором файлов, который вам нужен, вместо того, чтобы слепо применять его ко всем файлам репозитория.
Подробнее см. на странице "Выдача и регистрация".

И с Git 2.16+ git add --renormalize . позволяет конвертировать все соответствующие файлы eol.

person VonC    schedule 09.07.2017

В Android Studio перейдите в настройки, меню - файл/настройки/редактор/стиль кода. Здесь вы можете выбрать разделитель строк по умолчанию.

person Dmitry    schedule 08.11.2018

Для тех, кто, как и я, ищет, как установить LF или CRLF для файлов Android Studio, вы можете изменить этот параметр в правом нижнем углу IDE. Нажмите «CRLF» и выберите другой вариант. Но я не знаю, как это сделать для всего проекта, а не для каждого файла в отдельности.

введите описание изображения здесь

person CoolMind    schedule 01.07.2018
comment
Для всех файлов может помочь git add --renormalize .: см. мой отредактированный ответ выше. - person VonC; 01.07.2018
comment
@VonC, спасибо! Я выполнил эту команду и изменил все текстовые файлы в проекте (git предлагает зафиксировать их все). :) - person CoolMind; 01.07.2018
comment
странно - это не появилось для меня. Показала только ветку git. - person Someone Somewhere; 10.04.2019