我的 github 存储库中有两个分支 - master
和 dev
分支。我有一个需要 merge 的需求master
分支到 dev
在以下条件下分支:
master
分支回 dev
自动分支。 这有可能做到吗?我相信我们可以使用 git Hooks 完成这项工作,但我不知道该怎么做。有人可以提供一个如何实现这一目标的例子吗?
我在网上看了一下,好像可以用
post-receive
与下面的内容 Hook ,但只有当有人向 master
添加提交时,我才对如何执行此操作感到困惑分支或任何 PR merge 到主分支?这也是正确的方法吗? git checkout master
git pull
git checkout dev
git pull
git merge master --no-ff --no-edit
git push
我明白,由于 merge 冲突,它可能并不总是可能的,但如果可能的话,我们希望它自动发生。更新
阅读更多关于
Github Actions
的信息后- 我创建了这样的文件.github/workflows/merge-back-to-dev.yml
在我的 git 存储库的根文件夹中,内容如下。这看起来对吗?我是否需要所有这些字段,例如 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 merge 到 master
直接分支然后master分支会自动 merge 到dev分支对吗?
最佳答案
对于私有(private) GHE (GitHub Enterprise) 服务器,仅 pre-receive hooks受支持,这不是您需要的(接收后 Hook 会很好)
由于 OP 也有 GitLab 服务器,因此 gitab-ci.yml
可以做到这一点并执行 merge 。
有点像 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 时)
那不会使用钩子(Hook),而是 GitHub Actions ,这有助于自动化在 GitHub 端执行的过程(与在客户端执行的钩子(Hook)相反)
您可以使用
on.<push|pull_request>.<branches|tags>
进入您的.github/workflows/myscript.yml
(您可以用更夸张的名称替换“myscript”,例如 merge-back-to-dev.yml
)您可以使用
nightly-merge
之类的操作,它会自动将稳定分支( master
或 main
) merge 到开发分支中。除了你的情况,你会在推送事件上明确调用它。
关于git - 在某些条件下使用钩子(Hook)自动将一个分支 merge 到另一个基础上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64759535/