我的团队已经设置了一个Github工作流,在该工作流中,我们会在develop分支上压缩并合并拉取请求,在master分支上进行变基并合并拉取请求(后者是为了保持提交顺序跨部署)。
我可以从Github设置中启用“Squash and merge”和“Rebase and merge”选项以适用于所有分支,但是否有一种方法可以进行每个分支的配置呢?例如,只允许在主分支上进行变基和合并操作,否则只允许压缩并合并操作。
可能是通过Github设置/Github操作等方式实现的。
我的团队已经设置了一个Github工作流,在该工作流中,我们会在develop分支上压缩并合并拉取请求,在master分支上进行变基并合并拉取请求(后者是为了保持提交顺序跨部署)。
我可以从Github设置中启用“Squash and merge”和“Rebase and merge”选项以适用于所有分支,但是否有一种方法可以进行每个分支的配置呢?例如,只允许在主分支上进行变基和合并操作,否则只允许压缩并合并操作。
可能是通过Github设置/Github操作等方式实现的。
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