Настройка атрибутов 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