{"meta":{"title":"Настройка Git для обработки окончаний строк","intro":"Чтобы избежать проблем в объектах diff, можно настроить Git для правильной обработки окончаний строк.","product":"Начало работы","breadcrumbs":[{"href":"/ru/get-started","title":"Начало работы"},{"href":"/ru/get-started/git-basics","title":"Базовые возможности Git"},{"href":"/ru/get-started/git-basics/configuring-git-to-handle-line-endings","title":"Обработка конец строки"}],"documentType":"article"},"body":"# Настройка Git для обработки окончаний строк\n\nЧтобы избежать проблем в объектах diff, можно настроить Git для правильной обработки окончаний строк.\n\n## Сведения об окончаниях строк\n\nКаждый раз, когда вы нажимаете клавишу <kbd>ВВОД</kbd> на клавиатуре, вы вставляете в строку невидимый символ, называемый окончанием строки. Разные операционные системы обрабатывают окончания строк по-разному.\n\nКогда вы работаете над проектами с Git и GitHub, Git может дать неожиданные результаты, если, например, вы работаете на Windows-машине, а ваш соавтор внес изменения в macOS.\n\nЧтобы эффективно взаимодействовать с пользователями, использующими разные операционные системы, вы можете настроить обработку окончаний строк в Git.\n\n## Глобальные параметры для окончаний строк\n\nКоманда `git config core.autocrlf` используется для изменения способа обработки окончаний строк в Git. Она принимает один аргумент.\n\n<div class=\"ghd-tool mac\">\n\nВ macOS вы просто передаете в конфигурацию параметр `input`. Например:\n\n```shell\n$ git config --global core.autocrlf input\n# Configure Git to ensure line endings in files you checkout are correct for macOS\n```\n\n</div>\n\n<div class=\"ghd-tool windows\">\n\nВ Windows вы просто передаёте `true` в конфигурацию. Например:\n\n```shell\n$ git config --global core.autocrlf true\n# Configure Git to ensure line endings in files you checkout are correct for Windows.\n# For compatibility, line endings are converted to Unix style when you commit files.\n```\n\n</div>\n\n<div class=\"ghd-tool linux\">\n\nВ Linux вы просто передаете в конфигурацию параметр `input`. Например:\n\n```shell\n$ git config --global core.autocrlf input\n# Configure Git to ensure line endings in files you checkout are correct for Linux\n```\n\n</div>\n\n## Параметры для отдельных репозиториев\n\nПри необходимости можно настроить `.gitattributes` файл для управления тем, как Git считывает конец строки в определенном репозитории. При фиксации этого файла в репозитории Git переопределяет параметр `core.autocrlf` для всех участников репозитория. Это гарантирует согласованное поведение для всех пользователей независимо от параметров и среды Git.\n\nФайл `.gitattributes` должен быть создан в корне репозитория и зафиксирован, как и любой другой файл.\n\n              `.gitattributes` Файл выглядит как таблица с двумя столбцами:\n\n* В левом столбце содержатся имена файлов Git для сопоставления.\n* В правом столбце содержатся конфигурации окончаний строк, которые Git должен использовать для соответствующих файлов.\n\n### Пример\n\nНиже приведен пример `.gitattributes` файла. Его можно использовать в качестве шаблона для ваших репозиториев:\n\n```text\n# Set the default behavior, in case people don't have core.autocrlf set.\n* text=auto\n\n# Explicitly declare text files you want to always be normalized and converted\n# to native line endings on checkout.\n*.c text\n*.h text\n\n# Declare files that will always have CRLF line endings on checkout.\n*.sln text eol=crlf\n\n# Denote all files that are truly binary and should not be modified.\n*.png binary\n*.jpg binary\n```\n\nВы видите типы сопоставляемых файлов, разделенные пробелами (`*.c`, `*.sln`, `*.png`), после которых указывается параметр — `text`, `text eol=crlf`, `binary`. Мы рассмотрим некоторые возможные параметры ниже.\n\n* `text=auto` Git будет обрабатывать файлы наилучшим образом. Это хороший вариант по умолчанию.\n\n* `text eol=crlf` Git будет всегда преобразовывать окончания строк в `CRLF` при извлечении. Этот вариант следует использовать для файлов, которые должны поддерживать окончания `CRLF`, даже в OSX или Linux.\n\n* `text eol=lf` Git будет всегда преобразовывать окончания строк в `LF` при извлечении. Это следует использовать для файлов, которые должны сохранять окончания LF, даже на Windows.\n\n* `binary` Git поймет, что указанные файлы не являются текстом и изменять их не следует. Параметр `binary` также является псевдонимом для `-text -diff`.\n\n## Обновление репозитория после изменения окончаний строк\n\nПосле установки `core.autocrlf` параметра или фиксации `.gitattributes` файла Git автоматически изменяет конец строки, чтобы соответствовать новой конфигурации. Вы можете найти, что Git сообщает об изменениях в файлах, которые вы не изменили.\n\nЧтобы убедиться, что все конец строки в репозитории соответствуют новой конфигурации, создайте резервную копию файлов с помощью Git, а затем удалите и восстановите все файлы, чтобы нормализовать конец строки.\n\n1. Перед добавлением или фиксацией изменений убедитесь, что Git правильно применил конфигурацию. Например, Git автоматически определяет, являются ли файлы в репозитории текстовыми или двоичными файлами. Чтобы избежать повреждения двоичных файлов в репозитории, рекомендуется явно пометить файлы как двоичные в `.gitattributes`. Дополнительные сведения см. в разделе [gitattributes — определение атрибутов на путь](https://www.git-scm.com/docs/gitattributes#_marking_files_as_binary) в документации по Git.\n1. Чтобы избежать потери локальных изменений в файлах в репозитории, добавьте и зафиксируйте все выдающиеся изменения, выполнив следующие команды.\n\n   ```shell copy\n   git add . -u\n   git commit -m \"Saving files before refreshing line endings\"\n   ```\n\n1. Чтобы обновить все файлы в текущей ветви, чтобы отразить новую конфигурацию, выполните следующую команду.\n\n   ```shell copy\n   git add --renormalize .\n   ```\n\n1. Чтобы отобразить перезаписанные, нормализованные файлы, выполните следующую команду.\n\n   ```shell copy\n   git status\n   ```\n\n1. При необходимости, чтобы зафиксировать все невыполненные изменения в репозитории, выполните следующую команду.\n\n   ```shell copy\n   git commit -m \"Normalize all the line endings\"\n   ```\n\n## Дополнительные материалы\n\n* [Настройка Git — атрибуты Git](https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes) в книге Pro Git\n* [git-config](https://git-scm.com/docs/git-config) на страницах руководств для Git\n* [Начало работы — первая настройка Git](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup) в книге Pro Git\n* [Учитывайте окончания строк](http://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/), автор: [Тим Клем](https://github.com/tclem)"}