按分支设置拉取请求合并选项

7

我的团队已经设置了一个Github工作流,在该工作流中,我们会在develop分支上压缩并合并拉取请求,在master分支上进行变基并合并拉取请求(后者是为了保持提交顺序跨部署)。

我可以从Github设置中启用“Squash and merge”和“Rebase and merge”选项以适用于所有分支,但是否有一种方法可以进行每个分支的配置呢?例如,只允许在主分支上进行变基和合并操作,否则只允许压缩并合并操作。

可能是通过Github设置/Github操作等方式实现的。


2023,仍然是一个相关的问题。 - undefined
@osynavets 确实。我尝试并在下面提出了一个答案。 - undefined
1个回答

0
由于存储库设置中似乎没有本地功能来强制在每个分支上实施不同的合并选项,您可能需要编写一个GitHub Actions来强制分支的特定合并策略。
您可以创建一个在拉取请求事件上运行的GitHub Actions工作流文件。在工作流中,您可以编写一个脚本来检查拉取请求的基本分支,并在拉取请求不符合合并策略条件时使工作流失败。
例如:
name: Enforce Merge Strategy
on:
  pull_request:
    types:
      - opened
      - synchronize

jobs:
  enforce:
    runs-on: ubuntu-latest
    steps:
    - name: Check base branch and merge method
      run: |
        BASE_BRANCH="${{ github.event.pull_request.base.ref }}"
        if [[ "$BASE_BRANCH" == "master" ]]; then
          # Enforce "Rebase and Merge" for master; Fail if not
          # Logic here to check if it is a rebase and merge
          # For instance, check if the branch is up-to-date with 'master'
          if [[ "$BASE_BRANCH" == "master" ]]; then
            git fetch origin master
            UP_TO_DATE=$(git rev-list HEAD..origin/master --count)
            if [[ "$UP_TO_DATE" != "0" ]]; then
              echo "Branch is not up-to-date with master. Please update your branch."
              exit 1
            fi
          fi
        elif [[ "$BASE_BRANCH" == "develop" ]]; then
          # Enforce "Squash and Merge" for develop; Fail if not
          # Logic to check if multiple commits exist in the pull request for 'develop'
          if [[ "$BASE_BRANCH" == "develop" ]]; then
            git fetch origin ${{ github.head_ref }}
            NUMBER_OF_COMMITS=$(git rev-list origin/${{ github.head_ref }} ^origin/$BASE_BRANCH --count)
            if [[ "$NUMBER_OF_COMMITS" -le 1 ]]; then
              echo "Not enough commits for a squash. Please make multiple commits."
              exit 1
            fi
          fi
        else
          echo "Invalid base branch. Cannot proceed."
          exit 1
        fi

哇,看起来很酷 我要和我的团队讨论一下 谢谢! - undefined
我理解得对吗?这种方法要求开发人员在将功能分支合并到开发分支之前,手动压缩所有提交记录吗? - undefined
@osynavets 是的,这个想法是在接受 PR 之前检查开发人员是否做对了。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接