Ты можешь писать хоть идеальный код, но если у тебя репозиторий превращается в свалку IDE-шных файлов, автогенерённых мусоров и бесполезных диффов по composer.lock, то всё равно стыдно.
.gitignore тут не спасает — он отвечает только за то, что не попадёт в коммит. А вот .gitattributes рулит тем, как Git показывает diff, что он вообще учитывает, и какие файлы будут упакованы при git archive или при публикации пакета в Packagist.
Если его нет — ты живёшь в хаосе.
.gitattributes — это тот файл, про который 90% людей вспоминают только тогда, когда им уже больно от грязного diff и лишних файлов в пакете. Для проектов на Composer он нужен, чтобы навести порядок: от нормализации переносов строк до того, какие файлы реально улетают в пакеты и архивы.
Базовый пример для PHP Composer проекта
# Нормализуем все .php-файлы в LF
*.php text eol=lf
# Не показывать diff для зависимостей и мусора
composer.lock -diff
vendor/ -diff
node_modules/ -diff
.env -diff
.DS_Store -diff
.idea/ -diff
.vscode/ -diff
Этим ты убьёшь сразу три проблемы:
— разные переносы строк (Windows vs Linux),
— бесполезные diff по зависимостям и IDE-шному мусору,
— ненужный шум в пул-реквестах.
Оптимизация под Packagist
Когда ты публикуешь пакет, Packagist тянет его прямо из GitHub. И вот там .gitattributes становится особенно важным.
Можно явно сказать, что в релиз не должны попадать тесты, конфиги IDE и прочая муть:
/tests export-ignore
/.github export-ignore
/.gitignore export-ignore
/.gitattributes export-ignore
/phpunit.xml.dist export-ignore
В итоге твой пакет весит меньше, а пользователь не получает кучу хлама в vendor/.
Финалочка
.gitattributes — это не про «красоту», а про выживание. С ним у тебя чище diff, меньше мусора в пакетах и одинаковые переносы строк у всей команды. Без него ты продолжаешь жить в бардаке и спорить в пул-реквестах про «почему у меня CRLF».
0 комментариев