如何使作曲家只更新 composer.lock/json 中的文件而不拉取新版本


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

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

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

我想要的是让作曲家更新是一个手动过程,使用特定版本提交 composer.lock,并且仅根据 composer.lock 中的更改更新作曲家。 但我不明白该怎么做(也许我误解了 - 而且它不是那样工作的......

有没有办法做到这一点,或者另一种方法来解决这个问题?

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

一般规则是,如果存在.lockinstall使用update,总是只使用.json

我找到了一种方法(几乎)做到这一点。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

我在结帐后的 git 钩子中运行它。 我提交 composer.lock 和 .gitignore the composer.lock.old。 当我想进行更新时,我会使用作曲家更新手动进行,然后提交 composer.lock。

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

仍然最好强制作曲家只加载 composer.lock 中的特定版本。