【问题标题】:Git deploy branch to server on commit/pushGit 在提交/推送时将分支部署到服务器
【发布时间】:2014-10-17 15:36:39
【问题描述】:

我正在开发一个网站,并已开始使用版本控制 (Git) 并拥有几个分支(目前为“master”和“develop”)。所以我经常致力于“开发”并将其推送到 Bitbucket。

我希望我们的开发网络服务器始终拥有“开发”分支中的最新版本,而不是通过 FTP 手动上传。

我可以完全访问这个网络服务器,Windows 2008 R2(但如果需要也可以使用 Linux),所以可以安装我需要的任何东西。

关于如何做到这一点的任何想法?

我对 Git 还很陌生,所以如果我想要做的只是疯狂,请说一下。

【问题讨论】:

    标签: git deployment development-environment git-branch


    【解决方案1】:

    您可以使用远程 git 存储库上的 post-receive 挂钩来捕获对开发分支的提交并使其部署(或任何您想要的)分支。

    无论何时进行推送,都会在遥控器上运行 post-receive 挂钩。您基本上需要检测是否推送到开发分支,如果是则将开发分支检出到您的部署目录中。

    我的后接收看起来像这样:

    DEPLOYDIR=/directory/you/want/to/deploy/to
    BRANCH=develop
    while read oldrev newrev ref; do
      if [[ $ref =~ .*/$BRANCH$ ]]; then
        echo "Ref $ref received.  Deploying branch to $DEPLOYDIR"
        cd $DEPLOYDIR
        git fetch origin
        git reset --hard origin/$BRANCH
      fi
    done
    

    我发现这篇文章在设置我的 post-receive 时非常有用:http://gitolite.com/deploy.html

    【讨论】:

    • 感谢您的回复,我认为这可能会有所帮助,但我不太明白的一件事是,它怎么知道这是一个接收后挂钩?我在上面的代码中看不到任何指定这个的东西?
    • "post-receive" 挂钩脚本只是启动远程服务器推送时从 git 自动运行的自定义脚本的名称。此功能内置于 git 本身。这是一个更好地描述它的链接:git-scm.com/book/en/Customizing-Git-Git-Hooks
    • 好吧,也许我应该换个说法。 Git 怎么知道只为接收后运行脚本而不是预提交或其他什么?在 Git 文档中,我只能看到它说要在 hooks 目录中放置一个适当命名的文件(无论它应该是什么意思)。
    • 只有在执行某些操作时才会运行挂钩。 post-receive 是一个服务器端钩子,它只会在推送到服务器时执行。要启用 post-receive 钩子,只需在 $GIT_DIR/hooks/post-receive 中创建一个脚本,它会在推送时自动运行。
    猜你喜欢
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 2012-10-20
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多