Git 如何自动更新远程回购的服务器副本?

Git 如何自动更新远程回购的服务器副本?,git,ssh,version-control,Git,Ssh,Version Control,没有版本控制GUI工具(例如SourceTree)的工作流是这样的。我在命令行中输入它。我在本地机器上有本地回购协议。我有一个服务器(AWS EC2实例)和我的本地repo副本。我使用Bitbucket进行远程回购。第一部分(本地,见下面的代码)是我在本地机器上完成的。然后,我使用SSH和命令行连接EC2服务器,并键入第二部分,git fetch,get merge: # On local repo: $ git add . $ git commit -m "Commit message" $

没有版本控制GUI工具(例如SourceTree)的工作流是这样的。我在命令行中输入它。我在本地机器上有本地回购协议。我有一个服务器(AWS EC2实例)和我的本地repo副本。我使用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
对于第一部分,我有一些GUI工具,比如SourceTree。但对于第二部分,我仍然必须使用命令行在服务器上获取和应用更改

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


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

您可以基于几个不同的repo事件(例如推送),通过Bitbucket Webhook触发服务器命令。只需创建一个网页,该网页运行一个脚本,在点击页面URL时在服务器上执行Git步骤

将webhook添加到Bitbucket repo,以便在所需事件发生时访问您的网页


请参见webhooks上的Bitbucket云文档。Bitbucket服务器与此类似。

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

将webhook添加到Bitbucket repo,以便在所需事件发生时访问您的网页


请参见webhooks上的Bitbucket云文档。Bitbucket服务器类似。

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

您可以在本地repo中使用预推钩子:在将
foo分支
推到远程之前,将触发预推钩子,然后您可以更新
master
分支并将
foo分支
合并到
master
中。预推钩子的脚本如下所示:

#!/bin/sh

git checkout master
git pull origin master
git merge foo-branch
git checkout foo-branch
注意:

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

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

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

您可以在本地repo中使用预推钩子:在将
foo分支
推到远程之前,将触发预推钩子,然后您可以更新
master
分支并将
foo分支
合并到
master
中。预推钩子的脚本如下所示:

#!/bin/sh

git checkout master
git pull origin master
git merge foo-branch
git checkout foo-branch
注意:

  • 如果将
    foo分支
    合并到
    master
    分支不是快进合并,或者合并时可能有冲突,则应使用
    -X
    选项自动解决合并冲突。例如,您可以使用
    git merge foo branch-X thethers
    来代替
  • 如果您还想将合并提交从本地
    master
    分支推送到远程
    master
    分支,那么应该使用
    git push--all
    来代替
    git push origin foo分支
顺便说一句:即使在将更改推送到远程repo时使用webhook触发脚本,也无法从远程repo执行git fetch和git merge