post-receive hook后如何执行命令

How to execute commands after post-receive hook

这是我的实际 post-receive 挂钩:

#!/bin/sh
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f

有什么方法可以让我在文件已经在文件夹中后 运行 命令?

我要运行composer update

钩子脚本只是一个 shell 脚本(在您的示例中由 /bin/sh 执行)。您的脚本当前只有一个命令,由您已有的 git checkout 行定义。

要在 git checkout 之后执行其他操作,请将其添加到脚本中 git 结帐行之后。应该这样做:

#!/bin/sh
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f
cd /var/www/domain.com && composer install

注意我用的是composer install,不是composer update。这是有充分理由的。

composer update 可能不会产生您在开发期间使用的确切依赖项。例如,如果您依赖 some/lib:1.2.*,您可能会在您的开发机器上获得版本 1.2.1,稍后在您的生产机器上获得 1.2.2。更糟糕的是,也许您正在使用类似 dev-master 的东西,在这种情况下,环境之间可能存在 主要 差异。

来自 its documentation:

In order to get the latest versions of the dependencies and to update the composer.lock file, you should use the update command.

the documentation for install 比较(强调我的):

The install command reads the composer.json file from the current directory, resolves the dependencies, and installs them into vendor.

php composer.phar install

If there is a composer.lock file in the current directory, it will use the exact versions from there instead of resolving them. This ensures that everyone using the library will get the same versions of the dependencies.

If there is no composer.lock file, Composer will create one after dependency resolution.

如果您提交 composer.lock 文件 as recommendedcomposer install 将在您的服务器上为您提供与您在其他地方使用的相同的版本。