Как восстановить CRLF в репозитории GIT, чтобы избежать конфликтов слияния

Я создал свое репо с autocrlf=true, а затем сделал несколько проверок и совершил транзакцию с autocrlf=false. Затем переключитесь на autocrlf=true (OS Win). Все казалось ОК, пока я не начал слияния между ветвями. Многие конфликты слияния возникли, когда весь файл был отмечен как измененный из-за изменения eols (я полагаю, это были те файлы, которые были извлечены и отправлены с помощью autocrlf=false).

Существует некоторая история, которая стоит для меня, поэтому я предпочитаю совершать некоторые преобразования или фиксации с преобразованным eols, а не создавать новое репо и начинать новую жизнь.

Вот как я понимаю autocrlf (OS Win):

если autocrlf=true

WorkingTree ->  commit  -> GITRepository
CRLF         CRLF to LF      LF
LF           no conv.        LF
WorkingTree <- checkout <- GITRepository
CRLF         LF to CRLF      LF

если autocrlf=false

WorkingTree ->  commit  -> GITRepository
CRLF         no conv.      CRLF
LF           no conv.      LF
WorkingTree <- checkout <- GITRepository
CRLF         no conv.      CRLF
LF           no conv.      LF

Теперь я хотел бы использовать GIT с autocrlf=false, поэтому я решил проверить каждую ветвь, восстановить eols исходных файлов с помощью утилиты EOL конвертер и завершите работу с CRLF. Я сделал это, но со временем все еще есть некоторые файлы, которые, вероятно, не были проверены после того, как я изменил настройку autocrlf на false (или эти файлы пришли на слияние с более старых нефиксированных коммитов? Во время преобразования я использовал маску *.filetype, чтобы автоматизировать обработку всех LF до CRLF, чтобы у меня не было другого объяснения такой ситуации). Я также попробовал touch файлы, чтобы повторно зафиксировать их все (как я увидел где-то здесь в stackoverflow), но изменение даты не относится к GIT AFAIK. Я также прочитал Как отменить повреждение autocrlf, но не уверен, что это мой случай, а также не понимаю трюки мастера.

Как я могу уйти от этого беспорядка, пожалуйста?

Ответ 1

Используйте опцию git merge "ignore-space-change" или "ignore-all-space" для "рекурсивной" стратегии. Этот параметр находится в 1.7.4.1, по крайней мере.

Ответ 2

Простой ответ: если вы не выполняете x-платформу dev с не-Windows, установите для этого значение значение false. Вам не нужно, чтобы ваш источник контролировал ваши файлы для вас. После исправления любых оставшихся проблем вы должны лететь. Убедитесь, что другие, работающие с вами, также установили для этого значение false.