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