And*_*dyP 7 git github githooks gitlab
我的 github 存储库中有两个分支 -master和dev分支。我有一个要求,需要在以下条件下将master分支合并到dev分支:
master将分支合并回dev分支。这有可能做到吗?我相信我们可以使用 git Hooks 来完成这项工作,但我不知道该怎么做。有人可以提供一个如何实现这一目标的例子吗?
我在线阅读它,看起来我可以使用包含以下内容的钩子,但我很困惑,只有当有人向分支添加提交或任何 PR 合并到主分支post-receive时,如何执行此操作?master这也是正确的方法吗?
git checkout master
git pull
git checkout dev
git pull
git merge master --no-ff --no-edit
git push
Run Code Online (Sandbox Code Playgroud)
我明白,由于合并冲突,这可能并不总是可能的,但如果可能的话,我们希望它自动发生。
更新
阅读更多有关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
Run Code Online (Sandbox Code Playgroud)
所以现在有了这个更改,每当我直接添加提交到master分支或任何 PR 直接合并到master分支时,master 分支都会自动合并到 dev 分支,对吗?
对于私有 GHE (GitHub Enterprise) 服务器,仅支持预接收挂钩,这不是您所需要的(后接收挂钩就可以了)
由于 OP 也有一个 GitLab 服务器,因此gitab-ci.yml可以完成并执行合并。
有点像这个要点:
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
Run Code Online (Sandbox Code Playgroud)
原始答案(当我以为是关于 github.com 时)
这不会使用钩子,而是使用GitHub Actions,它有助于自动化在 GitHub 端执行的流程(与在客户端执行的钩子相反)
on.<push|pull_request>.<branches|tags>您可以在您的中使用.github/workflows/myscript.yml(您可以将“myscript”替换为更表达的名称,例如merge-back-to-dev.yml)
您可以使用类似 的操作nightly-merge,它会自动将稳定分支(master或main)合并到开发分支中。除了您的情况之外,您将在推送事件上显式调用它。