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

2024-04-18

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

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

我明白,由于合并冲突,这可能并不总是可能的,但如果可能的话,我们希望它自动发生。

Update

阅读更多有关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/[email protected] /cdn-cgi/l/email-protection
        with:
          stable_branch: 'master'
          development_branch: 'dev'
          allow_ff: false

所以现在有了这个改变,每当我添加一个提交master直接分支或任何 PR 合并到master直接分支然后master分支会自动合并到dev分支对吧?


对于私有 GHE (GitHub Enterprise) 服务器,仅预接收钩子 https://stackoverflow.com/a/36896200/6309支持,这不是您所需要的(接收后挂钩就可以了)

由于 OP 也有一个 GitLab 服务器,gitab-ci.yml可以做到这一点并执行合并。
有一点像这个要点 https://gist.github.com/smutkiewicz/61b2f8d00f3561a20227fad54c2658f7#file-gitlab-ci-yml-L156-L165:

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 操作 https://github.com/features/actions,这有助于自动化在 GitHub 端执行的流程(与在客户端执行的钩子相反)

您可以使用on.<push|pull_request>.<branches|tags> https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#onpushpull_requestbranchestags进入你的.github/workflows/myscript.yml(您可以将“myscript”替换为更夸张的名称,例如merge-back-to-dev.yml)

您可以使用类似的操作nightly-merge https://github.com/marketplace/actions/nightly-merge,它会自动合并稳定分支(master or main)进入开发一。除了您的情况之外,您将在推送事件上显式调用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐