Здравствуйте у меня возник вопрос по поводу git. После выполнения команды "composer update" файл "composer.lock" меняется и я не могу перейти на другою ветку пока не сделаю коммит. Как сделать так, что бы не нужно было делать коммит?
Вот текст ошибки:
error: Your local changes to the following files would be overwritten by checkout:
composer.lock
Please commit your changes or stash them before you switch branches.
Aborting
Arik, Основной файл - это composer.json composer.lock - файл, который после composer update или composer init будет пересоздан. Следовательно - этот файл, не только можно, но и нужно прописывать в .gitignore
Алексей Копендаков, зачем init запускать если composer.json уже есть? composer.json - говорит рекомендации ПО которое необходимо, т.е. минимум php 7.1, Yii 2.0.6 и т.д. composer.lock - говорит на какой версии остановились с последнего "composer update". Выходит все кто ставит у себя и тем более на продакшн должны использовать "composer install", а кто делает "composer update" должен осознано это делать и проверять все что могло сломаться, желательно проверяя CHANGELOG и UPGRADE файлы пакетов что могли что хорошо у себя поменять
Arik, допустим https://github.com/yiisoft/yii2/blob/master/framew... если вы запустить composer update на продакшн с версией ниже этой, то есть шанс что сайт упадет (использовали классы что переименовали в этом коммите), composer.lock гарантирует что будет стоять имена та версию на которой кодил программист и делал коммит. Поэтому в игнор такое нельзя пихать
Евгений, а почему разработчик и продакшн должны получать обновления без явной просьбы на это? сами представьте версию зависимости, которая требует что-то изменить в коде перед продакшн? если кто-то на боевом будет composer update делать все время, то огромные шансы сайт положить, чтоб починить ему нужно будет в composer.json потолок указать версии и после этого скорее всего на этой версии и остановится обновления, сомневаюсь что кто то такое заметит после. composer.lock помогает ставить именно то на чем писали, а дальше уже профессионализм должен работать, хороший программист сначала у себя сделать composer update, проследит что все работает и все тесты проходят, и только потом делает коммит и деплой
Committing this file to VC is important because it will cause anyone who sets up the project to use the exact same versions of the dependencies that you are using. Your CI server, production machines, other developers in your team, everything and everyone runs on the same dependencies, which mitigates the potential for bugs affecting only some parts of the deployments. Even if you develop alone, in six months when reinstalling the project you can feel confident the dependencies installed are still working even if your dependencies released many new versions since then. (See note below about using the update command.)
Arik, так если composer.lock помогает писать разработчикам на одной версии, то зачем его кидать в gitignore? Проще его закомитить и использовать composer install членам команды, насколько я понимаю. Я с git работаю чуть больше недели и ещё многого не знаю, так что я могу вас не правильно понять из-за отсутствия опыта
Евгений, я не знаю зачем они это делают, но если знаете таких, то буду рад если уточните у них этот вопрос и подскажите остальным, может мы что-то упускаем?
При deploy-е приложения, имея composer.lock в вашем репозитории, вы должны использовать команду composer install. Так мы будем уверены, что на production сервере используются те же самые версии пакетов, как и при разработке. А также это значит, что Composer-у не требуется выполнять разрешение зависимостей и искать требуемые версии, что увеличивает скорость разворачивания.
А если делать composer update с composer.lock в gitignore, то каждый разработчик будет работать на разных версиях