Я работаю над проектом Laravel.
Я скопировал все файлы, включая файлы composer.json и composer.lock, из репозитория GitLab.
Затем я запускаю команду ниже, чтобы установить все пакеты и их зависимости:
composer install
Теперь все пакеты установлены, и мой проект работает правильно на локальном компьютере.
Но когда я хочу отправить новые изменения в удаленный репозиторий, я обнаружил, что хотя composer.json на локальном и сервере идентичны, но composer.lock файлы разные.
На изображении ниже показана небольшая часть этих различий:
Теперь я волнуюсь, что если я внесу изменения в производственную версию, то у всего проекта возникнут проблемы.
В чем причина разницы в файлах composer.lock?
@yivi, кажется, я однажды по ошибке запустил команду composer update. Однако, чтобы избежать ошибки, я еще раз получил файл composer.json из git и удалил файл composer.lock, а затем запустил команду composer install, надеясь решить эту проблему, но различия остались.
Опять же, install не изменяет существующий файл блокировки. Если удалить его, это то же самое, что запустить update.
Возьмите composer.lock из git и запустите install.
Возможно, это связано с вашим процессом развертывания. Что именно ты делаешь? Перед запуском обязательно проверьте свой проект (включая существующий файл блокировки) в рабочей среде composer install
@Оливье, я так и сделал, но теперь получил эту ошибку: Your lock file does not contain a compatible set of packages. Please run composer update., хотя файлы composer.json и composer.lock идентичны своим серверным версиям
Тогда у вас совсем другая проблема. Вы отправили в репозиторий файл блокировки в неправильном состоянии. На самом деле это не имеет отношения к этому вопросу, просто: ваше репо испорчено, вам нужно очистить свои зависимости, запустить тесты, а также зафиксировать и отправить исправленные версии.
Возможно, ваша версия PHP несовместима с версиями пакета, указанными в вашем файле блокировки.






Команда install не изменяет существующий файл блокировки, если он актуален.
Он читает ваш файл блокировки. Если ваш файл блокировки отличается от того, что вы изначально получили из репозитория, это означает, что вы выполнили какую-то другую операцию (например, update или require какой-то другой пакет... и в этом случае имеет смысл, что файл блокировки теперь другой, поскольку ваши зависимости изменились. ).
Файл блокировки будет отличаться от того, что вы получили из репозитория в трех случаях:
updaterequired или removed посылку.install: это то же самое, что и запуск update, поскольку композитор не может определить состояние блокировки для зависимостей, ему просто нужно будет создать новый файл блокировки с нуля, получив последние зависимости.Если вы непреднамеренно изменили свой файл блокировки и не хотите отправлять другой файл блокировки в исходную версию, просто восстановите изменения в своих composer.* файлах до последней заведомо исправной фиксации, полученной из репозитория.
installне изменяет существующий файл блокировки, если он актуален. Он читает ваш файл блокировки. Если ваш файл блокировки отличается от того, что вы изначально получили из репозитория, это означает, что вы выполнили какую-то другую операцию (например,updateилиrequireкакой-то другой пакет... и в этом случае имеет смысл, что файл блокировки теперь другой, поскольку ваши зависимости изменились. )