只允许来自某个分支的合并?

时间:2014-09-11 15:19:54

标签: git

考虑以下分支设置:

  • 生产部门
  • qa branch
  • 分期分支
  • 几个开发分支

是否有办法只允许从特定分支合并,例如允许生产分支仅接受来自qa分支的合并,但拒绝来自分段/开发分支的合并?

目标是确保只有通过某个分支及其相关工作流程的内容最终出现在生产分支中,并使用git进一步强制执行此操作。

1 个答案:

答案 0 :(得分:1)

假设您的开发人员推送到中央存储库,您可以安装update挂钩来强制执行您的策略:

#!/bin/sh

log() { printf %s\\n "$*"; }
error() { log "ERROR: $@" >&2; }
fatal() { error "$@"; exit 1; }

REF=$1
OLD=$2
NEW=$3

# ignore refs being deleted or created
case 0000000000000000000000000000000000000000 in
    "${NEW}"|"${OLD}") exit 0;;
esac

case ${REF} in
    refs/heads/production)
        git rev-list --no-merges "${OLD}".."${NEW}" |
        while IFS= read -r rev; do
            git merge-base --is-ancestor "${rev}" refs/heads/qa \
                || fatal "${rev} must be merged to qa\
 before it can be merged to production"
        done
        ;;
esac

(以上挂钩尚未经过测试。如果您遇到任何问题,请告诉我。)