我们正在公司环境中从 Subversion 切换到 Mercurial。将有一个可通过 HTTPS 和基本 HTTP 身份验证访问的中央存储库。
现在我很好奇是否可以强制使用特定的用户名进行提交?我说的是可以.hgrc
像这样设置的用户名
[ui]
username = John Doe <[email protected]>
并且在日志消息中可见。
由于此文件位于每个开发人员的机器上,因此不受管理员的控制。
这不会成为问题,因为我们信任内部开发人员,但外部人员(自由职业者)也可以访问至少一些存储库。我们绝对不希望他们以不同的名字签入。
如果用户名可以绑定/强制为 HTTP 用户名,那就太好了。例如,如果 John 将他的更改推送到 URL,则所有提交的用户名都将设置为。https://[email protected]/hg/project1
John Doe <[email protected]
这可能吗?
答案1
您可以在推送时在服务器端强制执行用户名。例如,对于您的自由职业者来说,可能只允许他们推送包含一些预先批准的用户名的更改(这可能会在一定程度上限制 Mercurial 的其他优秀功能,即人们可以在推送之前相互共享他们的更改)。您还可以在中央服务器上拥有预先批准的用户名的完整列表。
所有这些都可以通过 pretxnchangegroup 钩子完成。
答案2
正如 djc 提到的,您可以使用 pretxnchangegroup 钩子。有关在中央存储库上强制执行提交策略的文档位于EnsureCommitPolicy 维基页面在 Mercurial 文档中。
这可能会造成其他问题,因为用户直到尝试将问题推送回安装了钩子的“主”存储库时才会发现该问题。在这种情况下,他们必须从存储库中删除所有修订,然后使用新用户名重新应用它们。
我认为,一个更好的选择就是不让你的自由职业者访问主存储库。他们可以将变更集发送给你的主要开发人员,然后由他们自己修改补丁并将其放入存储库中。
如果你只需要修复现有问题,请参阅“我可以更改 mercurial 变更集上的用户名吗?”在 stackoverflow 上。