我想阻止用户在未正确设置用户名时推送到我的存储库。在实践中,我想这样:
foreach commit in pushed_stuff:
if not commit.username in some_list:
reject push
钩子pre-receive
似乎合适,但如何从收到的每个提交对象中提取用户名? update
似乎得到了对象名称,但是根据我的理解,当它已经在我的存储库中时(就在ref移动之前)发生了。
.gitconfig
。
更新:我对VonC的建议有疑问。使用预接收时,如果有人推送新分支,则<old-value>
为“000000000”。因此,如果他已经对该新分支做了几次提交并且他试图推送它,那么执行git rev-list ... $ new只给我一次提交。但也许其他提交之前它有一个我想拒绝的坏用户名。我找不到告诉git给我所有新提交的方法。当分支已经存在时,执行git rev-list ... $ old .. $ new完成这项工作。
答案 0 :(得分:1)
我认为这在“Git/gitosis: How to check validity of user name and email?”中有所解决。
现在,引用的SO问题是关于安全机制(你不想要的),但是:
git log -1 --pretty=format:%ae $new
根据{{3}}中pre-receive
hook的建议,可以帮助Bombe
%an
或%aN
可能更适合您的情况。
此挂钩执行一次以进行接收操作。它不需要参数,但是对于每个ref都要更新它在标准输入上接收格式的一行:
<old-value> SP <new-value> SP <ref-name> LF
其中:
<old-value>
是存储在ref中的旧对象名称,- 中的新对象名称
<new-value>
是要存储在ref和<ref-name>
是引用的全名。创建新参考时,
<old-value>
为40 0.