微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用钩子在某些条件下自动将一个分支合并到另一个基础中?

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

  • 公关直接合并到master分支后,我需要将master分支自动合并回dev分支。
  • 每当有人将提交直接添加到master分支中时,我都需要将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的操作,该操作会自动将稳定分支(mastermain)合并到开发分支中。除非您有这种情况,否则您将在push事件中显式调用它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。