Решаем конфликты в composer.lock

Работа в команде это весело и здорово. Мы делимся опытом, учимся друг у друга, сваливаем тяжелую работу на других и делаем крутые штуки, которые нельзя было бы сделать в одиночку.
Но команда это не только плюсы, но еще и минусы. Например мы можем столкнуться вот с таким.

CONFLICT (content): Merge conflict in composer.lock
Automatic merge failed; fix conflicts and then commit the result.

Решение любого конфликта едва ли доставляет удовольствие, но этот требует особенного порядка действий. К счастью это совсем несложно и нам не составит труда это сделать. Сейчас мы рассмотрим решение конфликта в composer.lock.

Чего делать точно не стоит

Ни в коем случае не стоит руками объединять изменения в composer.lock, как вы наверняка делаете это в других файлах. Это сгенерированный файл, так что при ручных изменениях он сломается с вероятностью 99%. Этот совет, кстати, применим не только для ситуаций с конфликтом, а является предостережением для любых походов в composer.lock вообще.

Еще одной плохой идеей будет такое:

git merge --ours composer.lock

Так мы просто проигнорируем изменения, которые сделал другой разработчик и наживем себе врага 🙂

Решение

Столкнувшись с конфликтом такого рода необходимо принять версию composer файлов из удаленной ветки

git checkout origin/{base} -- composer.lock composer.json

Фигурально выражаясь тут действует “правило тапок”: кто первый слил свои изменения в репозиторий, тот и прав. После того как мы приняли чужие composer файлы, мы можем применить свои изменения:

composer require {new/package} --update-with-dependencies
composer update {existing/package}

При этом обеспечение работоспособности сборки лежит на нас. Оно и понятно: если у вас все хорошо с процессами разработки, то в репозитории лежит рабочая версия приложения, так что вы нее должны ее сломать. Например, если использованная вами ранее версия пакета конфликтует с библиотеками, подключенными в новой версии, вам придется найти рабочую конфигурацию. Но это случается редко, в большинстве случаев описанных выше шагов бывает достаточно.

На этом я прощаюсь с моими читателями и желаю им как меньше меньше конфликтов в коде и вне его 🙂

Творческий перевод этой статьи.