【问题标题】:Git post-receive hook and environment variablesGit post-receive 钩子和环境变量
【发布时间】:2014-02-21 11:14:50
【问题描述】:

我有 git 服务器在 Gitolite 上运行,在“git”系统用户下。我在 git 用户的 ~/.profile 中添加了:export STAGE_PATH="/srv/http/stage",正如你猜到的,我想在推送更改时自动将网站从 repo 放到舞台上。但是,在接收后挂钩中,我似乎无法使用变量 STAGE_PATH 。正常吗?有没有办法从 post-receive 挂钩访问环境变量?

【问题讨论】:

    标签: git environment-variables git-post-receive


    【解决方案1】:

    git 钩子不会将git 用户登录到shell,因此通常位置的exported 将不可用。实际上,在执行钩子时只会设置相当少的环境变量。

    您可以通过在您的钩子中插入for line in $(printenv); do echo $line; done) 来检查这一点。当然仅用于调试目的。

    【讨论】:

      【解决方案2】:

      如何添加 . ~git/.profile 在您的接收后挂钩脚本的顶部(假设它是 sh)。

      不过,目前还不清楚您到底想要什么。你要么想要:

      1) 只是为了推送到外部位置,而不关心 repos 之间的共性。在这种情况下,为什么需要其他地方的环境变量?为什么不将最终位置放在 post-receive 挂钩脚本本身中?

      2) 您希望有一些外部变量来控制您要将许多不同的存储库推送到的根目录,如果您需要更改,最好将该位置编码为单个变量它。如果是这种情况,那么您在上面所做的事情是有道理的。但是您不一定首先需要在 .profile 中执行此操作。显然 git 在运行脚本之前会为您清理环境。因此,您应该改为获取包含您的参数的外部文件(尽管我反对为此使用 .profile)。

      【讨论】:

      • 这是第二种情况。我正在尝试将“阶段”分支检出到暂存区域并执行一些操作(例如从文件导入数据库),这是暂存服务器,所以我认为“暂存路径”是非常重要的环境功能,所以我尝试设置它up 作为环境变量(它可能应该在 /etc/profile 中设置,但我现在只是在试验)。如果钩子没有关于环境的信息 - 它会使事情变得不那么干净。 :(
      猜你喜欢
      • 1970-01-01
      • 2012-03-20
      • 2014-05-13
      • 2014-10-28
      • 1970-01-01
      • 2011-04-15
      • 2012-02-17
      • 2013-06-26
      • 2012-01-02
      相关资源
      最近更新 更多