Перейти к основному содержимому

Настройка атрибутов Git

Что это

Файл .gitattributes задает правила обработки файлов в Git: окончания строк, типы файлов (текст/бинарный), поведение diff/merge и интеграцию с Git LFS.

Для 1С это особенно важно, потому что в одном репозитории обычно могут быть и исходники (.bsl, .os, .xml), и бинарные артефакты (.cf, .cfe, .epf, .erf).

Зачем настраивать

  • Чтобы избежать «ломания» окончаний строк между Windows и Linux/macOS
  • Чтобы Git не пытался делать текстовый diff для бинарных файлов
  • Чтобы корректно подключить Git LFS для крупных артефактов
  • Чтобы у всей команды были одинаковые правила в репозитории

Базовый пример для 1С

Рекомендуемый эталонный файл:

Лучше брать его как источник истины и при необходимости адаптировать под конкретный проект.

Как это читать

ПравилоЧто делает
* text=autoАвтоматическое определение текстовых файлов и нормализация EOL
*.bsl text eol=crlfДля BSL-файлов всегда CRLF в рабочем дереве
*.sh text eol=lfДля shell-скриптов всегда LF (важно для Unix-окружений)
*.cf binaryФайл считается бинарным, Git не делает текстовый diff/merge
*.png binaryДля изображений отключается текстовая обработка

Когда использовать binary, а когда text

Используйте text, если файл:

  • хранится в виде, читаемом человеком;
  • должен участвовать в diff/merge;
  • требует фиксированного EOL (lf или crlf).

Используйте binary, если файл:

  • не предназначен для чтения как текст;
  • не должен автоматически перекодироваться;
  • вызывает «шум» в diff при попытке сравнения.

Связь с Git LFS

Для больших бинарных файлов .gitattributes задает правила Git LFS.

Пример для типового Git-проекта (дизайн, видео, архивы):

*.psd filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text

Такие правила означают, что Git хранит в репозитории только указатели, а содержимое файлов — в хранилище LFS.

Проверка и диагностика

# Показать атрибуты для файла
git check-attr --all -- path/to/file.bsl

# Переиндексация после изменений .gitattributes
git add --renormalize .
git status

git add --renormalize . полезно выполнить, если вы изменили правила EOL в уже существующем репозитории.

Рекомендации для команды

  • Не смешивайте в одном PR массовую нормализацию EOL и функциональные изменения
  • Для крупных бинарных файлов используйте Git LFS