仅允许合并具有特定名称的分支

Allow merging branches only with a specific name

所以我想为我的 GitHub 存储库创建一些 rules/restrictions,据我所知,最好的方法是使用 git 挂钩。让我很难创建的限制如下:我想阻止将任何分支合并到 master 中,但名称中包含“Release”的分支或换句话说:仅当它是发布分支时才允许合并到 master 中。我试过做一个 python 脚本,但问题是 sys.argv 给了我钩子的路径 (.git/hooks/pre-merge-commit) 而不是命令参数,所以我不知道如何从命令行获取输入以验证它是否是正确的分支

#!/bin/python
import sys, subprocess, re

print('inside script')

mergingBranch='Release'
protectedBranch='master'
 
print(len(sys.argv))

doc about pre-merge-commit 状态(强调我的):

pre-merge-commit

This hook is invoked by git-merge[1], and can be bypassed with the --no-verify option. It takes no parameters, and is invoked after the merge has been carried out successfully and before obtaining the proposed commit log message to make a commit.

因此,您必须查看存储库的状态才能获取信息:

  • 您可以通过git rev-parse --abbrev-ref HEAD
  • 获取活动分支的名称
  • 据我所知,合并分支的名称并没有直接存储在文件中,
    我所知道的最接近的事情是使用 :
git branch --points-at MERGE_HEAD
# or use for-each-ref, which has a stabler output for scripts :
git for-each-ref --points-at MERGE_HEAD
git for-each-ref --format="%(refname:lstrip=2)" --points-at MERGE_HEAD

如果你是 运行 git merge Release/feature 来自 master :

  • 第一个命令应该returnmaster
  • 第二个应该returnRelease/feature