3

所以我在我的服务器上设置了一个 post-checkout hook,它将运行 Composer

#!/bin/sh
# Composer Git Checkout Hook

PROJECT_NAME=example.com

cd /home/www/$PROJECT_NAME/htdocs

unset GIT_DIR

# Process composer.json if one exists.
if [ -f composer.json ]
then
    echo "Processing Composer"

    # Run the composer install
    composer.phar install
fi

部署时,它可以工作。但是,由于是新服务器并且我忘记启用 cURL 模块,因此安装失败,但接受了推送。

$ git push deploy master

Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 348 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Processing Composer
remote: Loading composer repositories with package information
remote: Installing dependencies from lock file
remote: Your requirements could not be resolved to an installable set of packages.
remote: 
remote:   Problem 1
remote:     - Installation request for facebook/php-sdk dev-master -> satisfiable by facebook/php-sdk dev-master.
remote:     - facebook/php-sdk dev-master requires ext-curl * -> the requested PHP extension curl is missing from your system.
remote: 
To ssh://adam@my-server.net/home/www/example.com/git
   0fa8a61..afa63ae  master -> master

如何获取 Composer 安装和退出的状态,以便远程存储库拒绝推送?

4

1 回答 1

2

首先,你的设置有问题。如果deploy是一个非裸仓库并且主分支已签出(我假设),则您无法推送到该仓库。另请参见此处

如果您希望能够拒绝推送,则需要在pre-receiveupdate 钩子中这样做。您可以使用这些来检查 Composer 配置文件是否已更改(在这种情况下,它将在提交中),如本问题所述。运行 Composer 本身需要检出,或者至少需要配置文件。运行 Composer 会减慢提交过程,因为 git 必须等到 Composer 完成才能向客户端报告。请注意,对于 post-receive 挂钩也是如此,即使它们不能拒绝推送。

你可以做的是使用update钩子,检查它是否包含composer.json在 master 分支中使用类似这样的更新,如果它包含更新的文件然后运行 ​​Composer 以找出它是否包含错误。您可以专门为此目的创建一个文件夹。目前我手头没有 Composer。但是该过程的返回值通常0表示成功,非零表示失败。

于 2013-04-09T22:10:10.870 回答