Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 在某些条件下使用钩子自动将一个分支合并到另一个分支?_Git_Github_Gitlab_Githooks - Fatal编程技术网

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

Git 在某些条件下使用钩子自动将一个分支合并到另一个分支?,git,github,gitlab,githooks,Git,Github,Gitlab,Githooks,我的github存储库中有两个分支-master和dev分支。我需要在以下条件下将master分支合并到dev分支中: 一旦PR直接合并到主分支中,那么我需要自动将主分支合并回dev分支 每当有人直接向主分支添加提交时,我需要自动将master分支合并回dev分支 这有可能吗?我相信我们可以用git钩子实现这一点,但我不确定如何做到这一点。有人能举例说明如何做到这一点吗 我在网上读到它,看起来我可以使用post receivehook,其中包含以下内容,但我不知道如何做到这一点,只有当有人向

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

  • 一旦PR直接合并到主分支中,那么我需要自动将主分支合并回dev分支
  • 每当有人直接向主分支添加提交时,我需要自动将
    master
    分支合并回
    dev
    分支
这有可能吗?我相信我们可以用git钩子实现这一点,但我不确定如何做到这一点。有人能举例说明如何做到这一点吗

我在网上读到它,看起来我可以使用
post receive
hook,其中包含以下内容,但我不知道如何做到这一点,只有当有人向
master
分支添加commit,或者任何PR合并到master分支时?这是正确的方法吗

  git checkout master
  git pull

  git checkout dev
  git pull

  git merge master --no-ff --no-edit
  git push
我理解,由于合并冲突,这可能并不总是可能的,但如果可能,我们希望它自动发生

更新

在阅读了有关Github操作的更多信息后,我在git存储库的根文件夹中创建了一个类似于以下内容的文件:
.Github/workflows/merge-back-to-dev.yml
。这个看起来对吗?我是否需要所有这些字段,如运行在上的

  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
所以现在有了这个改变,每当我直接向
分支添加一个commit,或者任何PR直接合并到
分支,那么主分支将自动合并到dev分支,对吗?

对于私有GHE(GitHub Enterprise)服务器,只支持,这不是您需要的(后接钩就可以了)

由于OP也有一个GitLab服务器,
gitab ci.yml
可以执行合并操作。
有点像:


原始答案(当我认为是关于github.com的时候)

这将不会使用钩子,但它有助于自动化在GitHub端执行的流程(与在客户端执行的钩子相反)

您可以在
.github/workflows/myscript.yml
中使用(您可以用更高级的名称替换“myscript”,如
merge-back-to-dev.yml


您可以使用这样的操作,自动合并稳定分支(
master
main
)进入开发阶段。除了你的情况,你会在push事件中显式地调用它。

这回答了你的问题吗?在链接中,他们也建议使用git hook来完成这个过程。不幸的是,我们没有使用bitbucket。正如你所看到的,以前有人问过这个问题,答案似乎仍然是“不可能的”。我理解,但我们不能使用钩子和某种脚本来完成它,只要添加任何提交或将任何PR合并到master branch,就可以触发脚本?@AndyP是的,你的想法是对的,你只需要测试它。对不起,我出去了一会儿。谢谢你关于使用Github操作的建议,因为我不知道。我读了关于它的更多信息,我用我了解的细节更新了我的问题。你能让我知道我的用例是否正确,你觉得它是否合适吗?
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