Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы, возможно, еще выполняется. Актуальные сведения см. в документации на английском языке.

Настройка Git для обработки окончаний строк

Чтобы избежать проблем в объектах diff, можно настроить Git для правильной обработки окончаний строк.

Сведения об окончаниях строк

Каждый раз, когда вы нажимаете клавишу ВВОД на клавиатуре, вы вставляете в строку невидимый символ, называемый окончанием строки. Разные операционные системы обрабатывают окончания строк по-разному.

При совместной работе над проектами в Git и GitHub Git может выдавать непредвиденные результаты, например, если вы работаете на компьютере Windows, а ваш коллега внес изменение в macOS.

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

Глобальные параметры для окончаний строк

Команда git config core.autocrlf используется для изменения способа обработки окончаний строк в Git. Она принимает один аргумент.

В macOS вы просто передаете в конфигурацию параметр input. Пример:

$ git config --global core.autocrlf input
# Configure Git to ensure line endings in files you checkout are correct for macOS

В Windows вы просто передаете в конфигурацию параметр true. Пример:

$ git config --global core.autocrlf true
# Configure Git to ensure line endings in files you checkout are correct for Windows.
# For compatibility, line endings are converted to Unix style when you commit files.

В Linux вы просто передаете в конфигурацию параметр input. Например:

$ git config --global core.autocrlf input
# Configure Git to ensure line endings in files you checkout are correct for Linux

Параметры для отдельных репозиториев

При необходимости можно настроить файл .gitattributes, чтобы управлять тем, как Git считывает окончания строк в определенном репозитории. При фиксации этого файла в репозитории Git переопределяет параметр core.autocrlf для всех участников репозитория. Это гарантирует согласованное поведение для всех пользователей независимо от параметров и среды Git.

Файл .gitattributes должен быть создан в корне репозитория и зафиксирован так же, как и любой другой файл.

Файл .gitattributes представляет собой таблицу с двумя столбцами:

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

Пример

Ниже приведен пример файла .gitattributes. Его можно использовать в качестве шаблона для ваших репозиториев:

# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto

# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.h text

# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary

Вы видите типы сопоставляемых файлов, разделенные пробелами (*.c, *.sln, *.png), после которых указывается параметр — text, text eol=crlf, binary. Мы рассмотрим некоторые возможные параметры ниже.

  • text=auto Git будет обрабатывать файлы наилучшим образом. Это хороший вариант по умолчанию.

  • text eol=crlf Git будет всегда преобразовывать окончания строк в CRLF при извлечении. Этот вариант следует использовать для файлов, которые должны поддерживать окончания CRLF, даже в OSX или Linux.

  • text eol=lf Git будет всегда преобразовывать окончания строк в LF при извлечении. Этот вариант следует использовать для файлов, которые должны поддерживать окончания LF, даже в Windows.

  • binary Git поймет, что указанные файлы не являются текстом и изменять их не следует. Параметр binary также является псевдонимом для -text -diff.

Обновление репозитория после изменения окончаний строк

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

Чтобы все окончания строк в репозитории соответствовали новой конфигурации, создайте резервную копию файлов с помощью Git, удалите все файлы в репозитории (кроме каталога .git), а затем восстановите все файлы одновременно.

  1. Сохраните текущие файлы в Git, чтобы ваши изменения не были потеряны.
    $ git add . -u
    $ git commit -m "Saving files before refreshing line endings"
  2. Добавьте все измененные файлы обратно и нормализуйте окончания строк.
    $ git add --renormalize .
  3. Откройте перезаписанные, нормализованные файлы.
    $ git status
  4. Зафиксируйте изменения в репозитории.
    $ git commit -m "Normalize all the line endings"

Дополнительные материалы