【问题标题】:PHP Git Hook works directly when test execution but not when executing via gitPHP Git Hook 在测试执行时直接工作,但在通过 git 执行时不工作
【发布时间】:2013-12-22 23:56:46
【问题描述】:

我创建了以下 git 钩子来为我自动执行一些任务,并在我将提交推送到我的服务器时将其返回。当我直接运行它时,代码运行良好。当 git push 推送到服务器并且服务器执行它说的钩子时

remote: Deployment [BETA]: updating.
remote: git fatal not a git repository.
remote: Deployment [BETA]: complete.
remote: git fatal not a git repository.

我的钩子代码是:

#!/usr/bin/php
<?php

chdir("/var/www");

echo "Deployment [BETA]: updating." . PHP_EOL;
exec("git pull");
echo "Deployment [BETA]: complete." . PHP_EOL;

// Get the last commit message.
$log = shell_exec("git log -n 1 HEAD");

if (stripos($log, "[trigger:composer]"))
{
    echo "Composer: starting." . PHP_EOL;
    system("php /home/root/bin/composer.phar update");
    echo "Composer: completed." . PHP_EOL;
}

if (stripos($log, "[trigger:phpunit]"))
{
    system("./vendor/bin/phpunit");
}

如果有人可以帮助我,将不胜感激。

【问题讨论】:

  • 嗯,通常是cwd 或用户权限问题。来自pwd 的高管显示了什么?运行钩子的用户是否允许读取/列出 /var/www 和 git 目录? (顺便说一句:如果使用stripos,请始终使用!==false,因为它可以返回0,但这不是这里的问题)。
  • 感谢提醒有关 stripos,实际问题是设置了 GIT_DIR 和 GIT_WORKING_DIR,感谢您的帮助。

标签: php git githooks


【解决方案1】:

(来自#git)问题实际上是在钩子GIT_DIRGIT_WORK_TREE 的上下文中针对您正在使用的存储库进行了适当的设置。如果您要在钩子脚本中使用cd,那么您通常应该适当地设置GIT_DIRGIT_WORK_TREE:如果您要移动到Git 工作树,请取消设置它们,或者将它们设置为指向适当的工作树和存储库目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多