Дополнительный возврат каретки в конце каждого файла, вызывающий проблемы при слиянии - PullRequest
0 голосов
/ 21 сентября 2018

В нашем git-репо наши файлы иногда заканчиваются дополнительными возвратами каретки в конце строки.Когда я просматриваю файлы в vim, я вижу:

<?xml version="1.0" encoding="utf-8"?>^M
<Root>^M
    <Child/>^M
</Root>^M

Эти дополнительные ^M будут в каждой строке файла.Это вызывает проблемы при слиянии, потому что другая сторона слияния не будет иметь дополнительных ^M, и мы получим много конфликтов слияния.Передача опций игнорирования пробелов в git merge, похоже, не помогает, все равно конфликтует весь файл.

Мы используем git config core.autoclrf true.

Мне нужны две вещи;

  1. Как найти все эти ^M в моем репо?Так что я могу использовать некоторые git ls-files | grep <filter here> | sed 's/^M//', чтобы избавиться от них.
  2. Как мне определить, как они вводятся?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Ответы на Как нормализовать окончания рабочего дерева в Git? отлично подходят для исправления новых коммитов.(См. Как принятый, так и современный трюк Git 2.16 или новее git add --renormalize.)

Чтобы легче иметь дело с старыми коммитами, используйте расширенный параметр перенормировки: git merge -X renormalize <em>[other options you want if any] branch</em>.Это применяет ваши текущие настройки .gitattributes ко всем трем версиям каждого файла, который должен быть объединен.

0 голосов
/ 21 сентября 2018

Я решил это, используя unix2dos (я на Windows), как @Biffen предложил, а также ответ в связанном вопросе здесь .

...