Символы конца строки переворачиваются в настройках Eclipse

Eclipse хранит некоторые настройки проекта в файле, .settings/org.eclipse.wst.common.project.facet.core.xml изменяя символы конца строки, что создает ненужные коммиты и загрязняет репозиторий. Вот содержимое файла:

<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>                                 (this EOL flip-flops)
  <installed facet="jst.utility" version="1.0"/>  (this EOL flip-flops)
  <installed facet="java" version="11"/>
</faceted-project>

Действия по воспроизведению:

  1. Разработчик №1 открывает проект в Windows, и Eclipse изменяет символы конца строки на \r\n; затем этот разработчик фиксирует репозиторий.
  2. Затем разработчик №2 открывает проект в Linux, и Eclipse изменяет символы конца строки на \n; затем этот разработчик фиксирует репозиторий.
  3. Разработчик №1 вносит изменения в Windows, и EOL снова переворачивается. Промыть и повторить.

Это происходит с четырьмя файлами настроек (пока что), поэтому они почти всегда фиксируются в репозитории git при каждой отдельной фиксации; и это загрязняет репозиторий.

Есть ли способ сказать Eclipse использовать \r\n или \n навсегда? Настройки рабочей области и проекта, похоже, не влияют на «файлы настроек», а только на файлы «исходного кода».


person The Impaler    schedule 14.01.2020    source источник


Ответы (1)


Здесь возможны два подхода. Один из них — не хранить конфигурацию редактора в репозитории, что обычно является рекомендуемым подходом. Разные люди используют разные редакторы в разных системах, и все, кроме общей конфигурации редактора, может содержать настройки, применимые не ко всем системам.

Другой способ, если вы все равно хотите их сохранить, — использовать файл .gitattributes в вашем репозитории, а затем добавить строку, подобную следующей:

.settings/*.xml text

Затем запустите git add --renormalize .. Это приведет к тому, что окончания строк в репозитории будут LF и по умолчанию сообщит Git, чтобы проверить собственные окончания строк. Конечно, пользователь может настроить Git так, чтобы он делал что-то другое, если это подходит для его системы.

Затем, когда пользователь изменяет файл, окончания будут соответствовать его платформе, и это не заставит Git показывать измененные вещи. Если пользователь попытается зафиксировать его, файл будет нормализован, и никаких изменений не произойдет.

Вы также можете добавить * text=auto в файл .gitattributes, что позволит Git определить, в каких файлах должны быть нормализованы окончания строк в зависимости от того, определены ли они как двоичные или текстовые. Вы можете узнать больше о том, как настроить эти параметры на справочной странице gitattributes(5).

person bk2204    schedule 14.01.2020
comment
Затем, когда пользователь изменяет файл... -- пользователь не изменяет его. Eclipse незаметно делает это за кулисами, и разработчик узнает об этом только тогда, когда наступает время фиксации. Но я слышу вас; возможно, эти файлы следует рассматривать как неизмененные. - person The Impaler; 15.01.2020
comment
Тогда прочитайте это как «Тогда, когда Eclipse изменяет файл….. Кроме того, это не поддерживаемое использование для предположения без изменений, и это, вероятно, сломается неожиданным образом. - person bk2204; 15.01.2020