如何让 composer 只更新 composer.lock/json 中的文件而不是拉取新版本

How to make composer update only files in composer.lock/json and not pull new versions

我们将 composer.json/composer.lock 保留在我们的存储库中,并使用 composer 更新依赖项。我们有一个用于 post-checkout 的 githook 来进行作曲家更新。如果我们的依赖项或依赖项依赖项之一有新版本,它将下载更新并更改 composer.lock

问题是我不想要这个,因为我将有两个开发人员提交锁定文件并且会出现不必要的冲突。

我想要的是让作曲家更新成为一个手动过程,使用特定版本提交 composer.lock,并且仅根据 composer.lock 中发生的变化让作曲家更新。但我不知道该怎么做(也许我误会了 - 它不会那样工作..)

有没有办法做到这一点,或者有其他方法可以解决这个问题?

我找到了(几乎)做到这一点的方法。 https://gist.github.com/yehosef/8ffbab1f2dbbef22b757

#!/bin/bash
OLD=`md5 -q composer.lock.old`
NEW=`md5 -q composer.lock`
if [ "$NEW" != "$OLD" ]
then
  php composer.phar  update
fi
cat composer.lock > composer.lock.old

我 运行 这个在 post-checkout git 钩子里。我提交 composer.lock 和 .git 忽略 composer.lock.old。当我想进行更新时,我使用 composer update 手动进行更新,然后提交 composer.lock.

问题在于,这并没有直接将版本与 composer.lock 中的内容匹配 - 只是让我无法一直进行作曲家更新。

强制作曲家只加载 composer.lock 中的特定版本会更好。

将您的挂钩更改为 composer install,它将在结帐时从锁定文件中读取。然后还添加一个 post-merge 挂钩来做同样的事情,这样如果一个人提交对 composer.lock 的更改,合并后的版本将根据需要自动安装 and/or 更新。

一般规则是 install 使用 .lock(如果存在),update 总是只使用 .json