我们的团队使用Bitbucket来托管我们的Mercurial存储库。我们有一个repo,在配置它们时克隆到我们的开发虚拟机。我们使用一个相当典型的功能分支 - >拉请求 - >评论 - >将功能合并到PR工作流程中的default
。
我们喜欢什么:能够限制一些人无法通过命令行推送到default
分支(以避免意外提交到该分支)。即 - 我们希望强制执行它,以便通过拉取请求修改default
的唯一方法。
请注意,由于VM的设置,分叉并不是一个真正的选项(我们必须增加VM配置的复杂性以进行分支,并在配置的VM上设置所有这些,甚至那么这只意味着当有人不小心推到default
他们只是弄乱他们的叉子时。
Branch Restrictions似乎很有希望,虽然我们可以设置任何人都无法通过命令行推送,但这意味着只有一个命名用户或组可以实际合并PR(我们不会# 39; t want,理想情况下,团队中的任何人都可以合并,只需通过Bitbucket PR)。
这可能吗?有什么建议吗?
答案 0 :(得分:1)
所以我最终用Mercurial钩子解决了这个问题。具体来说,我创建了以下文件,我将其命名为prevent_default_push.py
并放入我克隆的.hg
目录中。
# branches to prevent being pushed to by command line.
# Separate branches by spaces
restricted_branches = "default".lower().split()
def branch_name(repo):
return repo[None].branch().lower()
def is_restricted(branch):
return branch in restricted_branches
def prevent_default(ui, repo, *args, **kwargs):
if is_restricted(branch_name(repo)):
print("Preventing push to default branch")
return True
return False
def prevent_commit(ui, repo, *args, **kwargs):
branch = branch_name(repo)
if is_restricted(branch):
print("You're on a restricted branch (%s), are you sure you want to commit? [YN]" % branch)
res = raw_input().strip().lower()
return res != "y"
return False
然后编辑.hg/hgrc
文件以使用这些钩子:
[hooks]
pre-push = python:.hg/prevent_default_push.py:prevent_default
pre-commit = python:.hg/prevent_default_push.py:prevent_commit
然后在default
分支上尝试提交时,会收到确认提示,如果您尝试按default
,则会直接拒绝。
示例运行:
$ hg commit
You're on a restricted branch (default), are you sure you want to commit? [YN]
n
abort: pre-commit hook failed
“n”是我输入的内容。
这方面的优点是,虽然.hg
目录中的内容不受版本控制(因此克隆不会得到它),但我们可以将这些内容自动化到我们的配置机制中在配置的VM上挂钩。