Git 如何自动更新远程回购的服务器副本?
没有版本控制GUI工具(例如SourceTree)的工作流是这样的。我在命令行中输入它。我在本地机器上有本地回购协议。我有一个服务器(AWS EC2实例)和我的本地repo副本。我使用Bitbucket进行远程回购。第一部分(本地,见下面的代码)是我在本地机器上完成的。然后,我使用SSH和命令行连接EC2服务器,并键入第二部分,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" $
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分支