Skip to content

Conflicts Git

bopoh13 edited this page May 25, 2022 · 5 revisions

Q: Как удалить BOM у проиндексированных файлов в Windows?

При сохранении файла из текстового редактора "Блокнот" в кодировке UTF‑8 записываются служебные символы BOM. Сторонние приложения как dos2unix могут удалить BOM, но и меняют символы переноса строки Windows с CRLF на LF.

A: Удаление BOM без замены символа переноса строки будет выполнять клиентский хук.

  • Нужно сохранить клиентский хук в директорию <REPO>\.git\hooks без расширения .sh
    Хук будет выполняться перед сохранением изменений (commit).

  • Для Windows необходимо задать настройку git config --global core.autocrlf true

Q: Как изменить символ перевода строки у файлов в репозитории?

A: Когда автор не задал свойства бывает невозможно проследить дальнейшие изменения.

  • Первым делом нужно узнать символы перевода строки (line‑ending) в репозитории по команде git ls-files -mo --eol. Атрибут -mo выберет только изменённые файлы.
  • Далее нужно открыть файл .gitattributes и прописать свойство eol
# для всех файлов
*.js		text	eol=LF
# или для конкретного файла
<FILE>.js	text	eol=LF
  • Если символы перевода строки (line‑ending) будут заменены, то после добавления файлов в индекс в консоли появится предупреждение
warning: CRLF will be replaced by LF in <FILE>.
The file will have its original line endings in your working directory.
  • По завершению нужно сохранить изменения (commit); до этого изменения нельзя будет увидеть.

Репозиторий для практики: https://github.com/teamtam/git-line-endings