【问题标题】:Git post-checkout - how to reject push if Composer installation failsGit post-checkout - 如果 Composer 安装失败如何拒绝推送
【发布时间】:2013-04-01 07:41:48
【问题描述】:

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

#!/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 安装和退出的状态,以便远程仓库拒绝推送?

【问题讨论】:

    标签: git bash composer-php githooks


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,我试试看。至于您对部署存储库的关注,我在 /home/www/example.com/git 上运行了git init --bare,并且实际的源文件在接收后检出到 /home/www/example.com/htdocs。我认为这是正确的做法,还是我弄错了?
    • 这是正确的方法 :) 我自己可能会将 git repo 存储在 www 文件夹之外,但这是一个不同的问题。
    猜你喜欢
    • 2012-11-01
    • 2014-06-04
    • 2021-10-03
    • 2011-10-17
    • 2019-05-31
    • 2021-08-10
    • 2017-03-01
    • 2013-12-26
    相关资源
    最近更新 更多