如何自动更新远程仓库的服务器副本?

时间:2017-07-21 02:49:09

标签: git ssh version-control

我没有版本控制GUI工具的工作流程(例如SourceTree)是这样的。我在命令行输入它。我在我的本地机器上有一个本地仓库。我有一个服务器(AWS EC2实例),带有我本地仓库的副本。我使用Bitbucket作为我的远程仓库。我在本地机器上做的第一部分(本地,见下面的代码)。然后我使用SSH和命令行连接我的EC2服务器并输入第二部分git fetchget 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 fetchgit merge

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

2 个答案:

答案 0 :(得分:1)

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

在发生所需事件时,向Bitbucket仓库添加一个webhook以点击您的网页。

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

答案 1 :(得分:1)

不,远程git repo无法执行合并操作,因为远程仓库是一个没有工作目录的裸仓库。因此git fetchgit merge等命令不能用于远程仓库。

您周围的工作可以在本地仓库中使用预推钩:在您将foo-branch推送到远程之前,将触发预推钩,然后您可以更新您的master分支并将foo-branch合并到master。预推钩的脚本如下:

#!/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。