【问题标题】:git post-receive hook which connects to remote via ssh and git pullsgit post-receive hook,它通过 ssh 和 git pulls 连接到远程
【发布时间】:2011-11-12 00:36:01
【问题描述】:

只是想写我的第一个 git 钩子。我有一个远程来源,当我推送到它时,我希望触发一个接收后挂钩,它将 ssh 到我的实时服务器和 git pull。这可以做到吗,这是一个好方法吗?

好的,我已经触发了钩子,并且实时服务器正在执行 git pull 但它说它已经是最新的了?有什么想法吗?

【问题讨论】:

    标签: linux git bash ssh


    【解决方案1】:

    是的,这是可以做到的,是的,在我看来,这是一个很好的做法。这是我们的用例: 我在一个小型开发小组工作,该小组为不同的人群维护几个站点。

    每个网站都有多个环境(测试版,它是所有开发人员的沙盒,登台,这是我们在上线之前向内容所有者展示更改的地方,培训是我们的培训人员用来培训新内容经理和上线的地方,每个人都去消费内容)。

    我们通过基于分支名称的接收后挂钩控制对所有这些环境的部署。我们可能有一个没有部署到任何地方的“热修复”分支,但是当我们将它与“beta”分支合并时,它会自动部署到 beta 服务器,以便我们可以测试我们的代码如何交互与其他开发人员的代码。

    有很多方法可以做到这一点,我们所做的是设置你的 ssh 密钥,以便 git 服务器可以 ssh 到你的 web 服务器并执行 git pull。这意味着您必须将 git@gitserver 的公钥添加到您的 git@webserver authorized_keys 文件中,反之亦然,然后,在 post-receive 挂钩上,您解析出分支并为其编写“case”语句,如下所示:

        read line
        echo "$line" | . /usr/share/doc/git-core/contrib/hooks/post-receive-email
        BRANCH=`echo $line |  sed 's/.*\///g'`
        case $BRANCH in
            "beta" )
            ssh git@beta "cd /var/www/your-web-folder-here; git pull"
            ;;
        esac
    

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      当然可以,但这不是最好的方法。当您使用git pull 时,git 将获取然后合并到您的工作副本中。如果可以保证该合并始终是快进的,那可能没问题,但否则您最终可能会在实时服务器上的已部署代码中解决冲突,这很可能会破坏它。使用 pull 部署的另一个问题是您不能简单地回到历史中较早的提交,因为 pull 只会告诉您您的分支已经是最新的。

      此外,如果您要拉入实时服务器上的非裸存储库,则需要采取措施防止 .git 目录中的数据被公开访问。

      一种类似但更安全的方法是通过钩子部署在实时服务器上的裸存储库中,该存储库将使用git checkout -f,但工作目录设置为您的代码应部署到的目录。您可以找到设置此类系统的分步指南here

      【讨论】:

      • 我真的不明白为什么这不是一个好方法。如果拉取是自动的,他将如何在实时站点的工作副本中发生冲突?此外,为您管理的每个实时站点准备另一个裸副本似乎是不必要的管理开销。
      • 如果每次拉取都是从之前的HEAD 状态快进,您将不会遇到任何此类冲突。但是,情况并非总是如此——您可能希望从不同的开发分支部署一个版本。更重要的是,如果您想在同一分支上恢复到较旧的提交,则拉取将使您处于相同状态并告诉您您已经是最新的。
      • 所以在我的设置中,我的本地机器可以 ssh 到我的远程源,我的源服务器有 ssh 密钥到我的实时服务器。我有两个分支,live 和 dev。我想要它,这样当我推送到原始开发时,它会更新原始服务器上的开发构建,当我推送到实时分支时,它将部署到实时服务器。有没有人可以学习一个类似的接收后挂钩脚本?
      猜你喜欢
      • 2015-03-22
      • 2014-06-02
      • 2013-07-17
      • 1970-01-01
      • 2012-07-30
      • 2013-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多