这是我的实际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 checkout行之后将其添加到脚本中.这样的事情应该做:
#!/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
在这种情况下,环境之间可能存在重大差异.
从它的文档:
要获取最新版本的依赖项并更新
composer.lock
文件,您应该使用该update
命令.
将其与(强调我的)文档进行install
比较:
该
install
命令composer.json
从当前目录中读取文件,解析依赖项并将其安装到其中vendor
.php composer.phar install如果
composer.lock
当前目录中有文件,它将使用那里的确切版本而不是解析它们.这确保了使用该库的每个人都将获得相同版本的依赖项.如果没有
composer.lock
文件,Composer将在依赖项解析后创建一个文件.
如果您按照建议提交composer.lock
文件,将在服务器上为您提供与在其他地方使用的版本相同的版本.composer install