カテゴリー
Linux

Composer.lock の content-hash が git merge でコンフリクトした時は composer update –lock して解決できる

composer update –lock とは?

composer update --help から抜粋です。

update

The update command reads the composer.json file from the current directory, processes it, and updates, removes or installs all the dependencies.

カレントディレクトリの composer.json を読み込み、その内容を実行し、依存パッケージのアップデート、インストールまたは削除を行う。

update –lock

  --lock                     Only updates the lock file hash to suppress warning about the lock file being out of date.

無効となってしまった lock ファイルの警告を抑えるために、 lock ファイルの hash の更新を行う。

経緯と実践

以上を別々の Git ブランチで行い、あとで両方ともマージしようとしました。すると、コンフリクトが発生しました><。

$ git diff
diff --cc composer.lock
index c3fc7de,84be2cd..0000000
--- a/composer.lock
+++ b/composer.lock
@@@ -4,7 -4,7 +4,13 @@@
          "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
          "This file is @generated automatically"
      ],
++<<<<<<< HEAD
 +    "content-hash": "b61cb1824cb1dc44c006a8ac1312a334",
++||||||| merged common ancestors
++    "content-hash": "b7904d07d1e1765a0a199aa11d6301a3",
++=======
+     "content-hash": "4030aaacf66a3e113314df2d7da36360",
++>>>>>>> inverse-seeed-generator
      "packages": [
          {
              "name": "dnoegel/php-xdg-base-dir",
$

参考と言いますか、まんま解決方法を次のページから学びました。

3 つの content-hash のうち、適当に真ん中の物を残して残りは削除し、 composer.lock を保存しました。

その後、 composer update --lock を実行しますと、新しい content-hash が発行されました。

composer update --lock によって、 lock ファイルに対しては content-hash の更新のみが行われ、 composer.json には変更は一切行われませんでした。これのみかと思いましたら、依存パッケージの更新も行われ (アップデート、インストール、アンインストール) も行われました。

$ docker-compose run --rm composer update --lock
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 3 installs, 0 updates, 2 removals
  - Removing krlove/eloquent-model-generator (1.3.2)
  - Removing krlove/code-generator (1.0.0)
  - Installing orangehill/iseed (v2.6.1): Downloading (100%)
  - Installing xethron/laravel-4-generators (3.1.1): Downloading (100%)
  - Installing xethron/migrations-generator (v2.0.2): Downloading (100%)
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating optimized autoload files
*******************************************
 /!\ Warning, you're using a deprecated
 ¨¨¨ version of Carbon, we will soon stop
     providing support and update for 1.x
     versions, please upgrade to Carbon 2.
*******************************************

Most features of Carbon 1 are still available in Carbon 2.
See how to migrate: https://carbon.nesbot.com/docs/#api-carbon-2

Please consider upgrading your Laravel dependencies to be compatible with Carbon 2:
  - laravel/framework at least to version 5.8.0

If you can't update Laravel, check https://carbon.nesbot.com/ to see how to
install Carbon 2 using alias version and our adapter kylekatarnls/laravel-carbon-2

You can run './vendor/bin/upgrade-carbon' to get help in updating carbon and other frameworks and libraries that depend on it.
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: orangehill/iseed
Discovered Package: xethron/migrations-generator
Package manifest generated successfully.
$

コンフリクトも、解決しました。

$ git diff
diff --cc composer.lock
index c3fc7de,84be2cd..0000000
--- a/composer.lock
+++ b/composer.lock
@@@ -4,7 -4,7 +4,7 @@@
          "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
          "This file is @generated automatically"
      ],
-     "content-hash": "b61cb1824cb1dc44c006a8ac1312a334",
 -    "content-hash": "4030aaacf66a3e113314df2d7da36360",
++    "content-hash": "4d22c92167c4f24b0127c8a5dc722b27",
      "packages": [
          {
              "name": "dnoegel/php-xdg-base-dir",
$

おわりに

初めて遭遇したコンフリクトでしたけれども、 comoser にはそれを見越した機能があって助かりました♪

次に同じことがあった場合、具体的な対処方法は忘れていると思いますが、このページ、または、 composer update --help で解決できたといことは、きっと出てくると思います。

以上です。

コメントを残す