在某些条件下使用钩子自动将一个分支合并到另一个分支?

And*_*dyP 7 git github githooks gitlab

我的 github 存储库中有两个分支 -masterdev分支。我有一个要求,需要在以下条件下将master分支合并到dev分支:

  • 一旦 PR 直接合并到 master 分支,那么我需要自动将 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 分支,对吗?

Von*_*onC 3

对于私有 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,它会自动将稳定分支(mastermain)合并到开发分支中。除了您的情况之外,您将在推送事件上显式调用它。