如何解决使用钩子在某些条件下自动将一个分支合并到另一个基础中?
我在github存储库中有两个分支-master
和dev
分支。我有一个需要在以下情况下将master
分支合并到dev
分支的要求:
这有可能吗?我相信我们可以使用git Hooks来完成这项工作,但是我不确定该怎么做。有人可以提供有关如何实现此目标的示例吗?
我在线阅读了该书,看起来可以使用带有以下内容的post-receive
钩子,但是只有在有人向master
分支添加提交或任何PR时,我才对如何执行此操作感到困惑合并到主分支?这也是正确的方法吗?
git checkout master
git pull
git checkout dev
git pull
git merge master --no-ff --no-edit
git push
我意识到由于合并冲突,并非总是可能的,但是如果可能的话,我们希望它会自动发生。
更新
在详细了解Github Actions
之后-我在git存储库的根文件夹中创建了一个类似.github/workflows/merge-back-to-dev.yml
的文件,内容如下。这看起来正确吗?我是否需要像runs-on
这样的所有字段?
name: 'Nightly Merge'
on:
push:
branches:
- master
jobs:
nightly-merge:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Nightly Merge
uses: robotology/gh-action-nightly-merge@v1.3.1
with:
stable_branch: 'master'
development_branch: 'dev'
allow_ff: false
所以现在有了此更改,每当我直接向master
分支添加提交或任何PR直接合并到master
分支时,master分支都会自动合并到dev分支吗?
解决方法
对于私有GHE(GitHub Enterprise)服务器,仅支持pre-receive hooks,这不是您所需要的(后接收钩子就可以了)
由于OP还具有一个GitLab服务器,因此gitab-ci.yml
可以解决问题并执行合并。
有点像this gist:
merge_back:
stage: merge back master to dev
only:
- master
script:
- git config --global user.email "$GIT_USER_EMAIL"
- git config --global user.name "$GIT_USER_NAME"
- git switch dev
- git merge $CI_COMMIT_SHA --no-commit --no-ff
原始答案(当我以为是关于github.com的时候)
那不是使用钩子,而是GitHub Actions,它有助于自动化在GitHub端执行的过程(与在客户端执行的钩子相反)
您可以在.github/workflows/myscript.yml
中使用on.<push|pull_request>.<branches|tags>
(可以用更专业的名称(例如merge-back-to-dev.yml
替换“ myscript”)
您可以使用类似nightly-merge
的操作,该操作会自动将稳定分支(master
或main
)合并到开发分支中。除非您有这种情况,否则您将在push事件中显式调用它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。