【问题标题】:Git hook to update various web folders based on branch pushed to remote serverGit钩子根据推送到远程服务器的分支更新各种Web文件夹
【发布时间】:2011-07-18 22:32:15
【问题描述】:

我正在使用 Gitosis (Debian Lenny) 开发一个 Web 应用程序,我希望能够将它推送到不同的远程存储库/位置,从而允许“前沿”、“发布候选”和“生产”版本具有镜像物理 Web 目录和代码库的应用程序。我希望每个目录都有应用程序的一个分支。所以一个存储库,三个“实时”版本。

我是 Git 新手,所以可能有更好的解决方案,但到目前为止我想出的方法是找到一种将钩子附加到分支的方法(我还没有找到),或者编写一个钩子来过滤正在提交的分支。

我的问题是如何设置一个更新后挂钩来检查提交的分支,为基于该分支的目录设置一个变量,并将代码库复制到可以通过 HTTP 立即访问的目录中?

git rev-list --branches --pretty=oneline --max-count=1

将返回类似:

cc5112ba59bc82f2e847ac264317c062ce80f69f test commit

但我需要分支本身的名称,例如“实验”或“大师”。

所以基本上我正在寻找类似的东西:

1) 获取刚刚提交的分支的名称(例如“master”、“experimental”)到字符串中

2) 使用 Bash case 声明要使用的目录

3) 运行类似“git archive --format=tar HEAD | (cd $LOCATION && tar xf -)”的内容,其中位置是从案例返回的内容。

我以为我正在接近以下内容,但意识到它没有返回分支名称,而是返回提交消息:

#!/bin/sh

# Get substr from "sha1[space]commit-msg"
BRANCH=$(git rev-list --pretty=oneline --branches --max-count=1 | awk '{split($0,array," ")} END{print array[2]}')
case $BRANCH in
    "experimental")
        dir="/home/APP_NAME/experimental"
    ;;
    "master")
        dir="/home/APP_NAME/production"
    ;;
esac
# move to location and copy files
git archive --format=tar HEAD | (cd $loc && tar xf -)

我确实意识到,如果我总是将分支作为提交的第一部分,我可以完成这样的事情,但我真的不想担心它。

任何帮助将不胜感激。提前致谢!

【问题讨论】:

    标签: git bash version-control gitosis


    【解决方案1】:

    如果您推送到 非裸 存储库(这不是推荐的技术,但可以使用此 post-update hook),您可以完成该钩子,知道:

    git symbolic-ref HEAD
    # or
    git rev-parse HEAD
    

    给你当前分支的名字,而$ref代表被推送的分支。
    然后您可以更新三个不同的工作树,每个工作树都已设置在正确的分支上。

    【讨论】:

      【解决方案2】:

      也许我遗漏了一些东西,但如果这是在 post-update 挂钩中,那么您将获得正在更新的参考名称作为挂钩的参数。例如如果我的推送更新了存储库中的masterexperimental,则调用post-update

       post-update refs/heads/master refs/heads/experimental
      

      ...您可以使用$1 访问它们,就像在您的钩子脚本中通常使用的$2 一样。

      顺便说一句,githooks 文档指出您可能要考虑使用 post-receive 钩子代替,它会获取有关标准输入的信息 - 但是,它也会为您提供 ref 的旧值和新值作为 ref 名称,这可能很有用。

      【讨论】:

        猜你喜欢
        • 2012-06-01
        • 2012-10-20
        • 2011-09-10
        • 2016-07-08
        • 2017-02-25
        • 2014-02-04
        • 2012-07-25
        • 2014-09-11
        • 1970-01-01
        相关资源
        最近更新 更多