【问题标题】:How to automate an update of a server copy of my remote repo?如何自动更新我的远程仓库的服务器副本?
【发布时间】:2017-07-21 13:17:46
【问题描述】:

我没有版本控制 GUI 工具(例如 SourceTree)的工作流程是这样的。我在命令行中输入它。我的本地机器上有一个本地仓库。我有一个服务器(AWS EC2 实例),里面有我的本地仓库的副本。我将 Bitbucket 用于我的远程仓库。第一部分(本地,见下面的代码)我在我的本地机器上做。然后我使用 SSH 和命令行连接我的 EC2 服务器并输入第二部分,git fetch,get merge:

# On local repo:
$ git add .
$ git commit -m "Commit message"
$ get push origin foo-branch

# On remote repo
$ git fetch origin
$ git merge origin/foo-branch

对于第一部分,我有像 SourceTree 这样的 GUI 工具。但是对于第二部分,我仍然必须使用命令行来获取并在我的服务器上应用更改。

我的问题是,是否有一些工具可以让流程自动化。这样就无需在命令行中使用 SSH 连接服务器并输入 git fetch 和 git merge。

例如,我只是在我的本地机器上推送一个提交(例如使用 SourceTree),我的服务器会自动检测到它并获取并合并更改。

【问题讨论】:

    标签: git ssh version-control


    【解决方案1】:

    您可以使用 Bitbucket webhooks 来根据几个不同的 repo 事件(例如 Push)触发您的服务器命令。只需创建一个网页,该网页运行一个脚本,当页面 URL 被点击时,该脚本在您的服务器上执行 Git 步骤。

    向 Bitbucket 存储库添加一个 webhook,以便在发生所需事件时访问您的网页。

    在此处https://confluence.atlassian.com/bitbucket/manage-webhooks-735643732.html 上查看 Webhook 上的 Bitbucket Cloud 文档。 Bitbucket 服务器类似。

    【讨论】:

      【解决方案2】:

      不,远程 git repo 无法执行合并操作,因为 remote repo 是一个没有工作目录的裸 repo。所以git fetch、git merge这样的命令不能用于远程repo。

      您可以在本地 repo 中使用 pre-push hook:在将 foo-branch 推送到远程之前,将触发 pre-push hook,然后您可以更新您的 @ 987654324@ 分支并合并foo-branch 到master。 pre-push hook的脚本如下:

      #!/bin/sh
      
      git checkout master
      git pull origin master
      git merge foo-branch
      git checkout foo-branch
      

      注意:

      • 如果将foo-branch 合并到master 分支不是快进合并,或者合并时可能会发生冲突,则应使用-X 选项自动解决合并冲突。比如你可以用git merge foo-branch -X theirs来代替。
      • 如果您还想将合并提交从本地 master 分支推送到远程 master 分支,则应使用 git push --all 代替 git push origin foo-branch。

      顺便说一句:即使您在将更改推送到远程仓库时使用 webhook 触发脚本,您仍然无法从远程仓库执行 git fetch 和 git merge。

      【讨论】:

        猜你喜欢
        • 2021-11-24
        • 1970-01-01
        • 1970-01-01
        • 2012-11-14
        • 1970-01-01
        • 2021-09-11
        • 2011-07-08
        • 1970-01-01
        • 2020-05-30
        相关资源
        最近更新 更多