Ответ
Да, для проектов-приложений composer.lock обязательно нужно коммитить в репозиторий. Этот файл фиксирует точные версии всех установленных зависимостей, включая их транзитивные зависимости. Это гарантирует, что все разработчики в команде и продакшен-среда используют идентичные версии пакетов, что предотвращает ошибки из-за расхождений в версиях.
Пример .gitignore для приложения (PHP-проекта):
/vendor/
.env
Исключение: Если вы разрабатываете библиотеку, которую будут подключать в другие проекты, то composer.lock коммитить не следует. Библиотека должна быть совместима с диапазоном версий, указанным в composer.json, чтобы не навязывать конечным приложениям конкретные версии зависимостей.
Пример .gitignore для библиотеки:
/vendor/
composer.lock Ответ 18+ 🔞
А, ну это вечный вопрос, ёпта! Слушай, тут всё просто, как три копейки, но люди постоянно путаются, будто в первый раз слышат.
Так вот, для обычного проекта — да, composer.lock в репозиторий пихать надо, обязательно. Это, блядь, святое! Представь себе: этот файл — как фотка на паспорт твоего vendor/ в конкретный момент. Там зафиксировано всё до последней запятой: какие именно версии пакетов стоят, включая все эти вложенные зависимости, которые сами по себе тянут ещё кучу всякого дерьма. Без этого файла у тебя один чувак накатит свежую версию какой-нибудь библиотеки, а у другого встанет всё, потому что там API поменяли. И потом начинается: «А у меня работает!», «А у меня — нет!», «Ты что, обновил?», «А я нет!». Доверия ебать ноль в такой ситуации. Коммит этого файла гарантирует, что все в команде и на продакшене работают с абсолютно одинаковым набором софта. Это не обсуждается.
Вот тебе пример .gitignore для нормального приложения (того самого, которое ты делаешь):
/vendor/
.env
vendor/ игнорируем — его Composer сам соберёт по composer.lock. А .env — там пароли и ключи, его в репу пихать — самоубийство.
НО! Есть же, блядь, исключение, от которого все и путаются. Если ты пишешь не приложение, а библиотеку (типа, пакет, который другие будут через Composer подключать), то тут всё наоборот. Твой composer.lock в репозиторий не идёт, нахуй его. Потому что твоя библиотека должна быть гибкой и работать с диапазоном версий, который ты указал в composer.json. А если ты закоммитишь свой лок-файл, ты навяжешь всем, кто будет твой пакет использовать, твои конкретные, возможно, устаревшие версии зависимостей. Это пиздец как неудобно. Ты же не хочешь, чтобы тебя считали распиздяем?
Вот так будет выглядеть .gitignore для библиотеки:
/vendor/
composer.lock
Да, оба файла игнорируются. vendor/ соберётся для разработки, а composer.lock — это твоё личное дело, в общий доступ его не выносим.
Короче, запомни раз и навсегда, чтобы не было удивления пиздец:
- Делаешь сайт/приложение/проект —
composer.lockв репу. - Делаешь библиотеку/пакет —
composer.lockв игнор.
Всё. Ядрёна вошь, и так в каждой второй статье пишут, а народ всё равно спрашивает. Надеюсь, теперь понятно?