仅允许合并具有特定名称的分支
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
:
- 第一个命令应该return
master
- 第二个应该return
Release/feature
所以我想为我的 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
:
- 第一个命令应该return
master
- 第二个应该return
Release/feature