当未配置推送器的用户名时,防止对远程存储库的git推送

时间:2010-12-13 09:19:07

标签: git

我想阻止用户在未正确设置用户名时推送到我的存储库。在实践中,我想这样:

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完成这项工作。

1 个答案:

答案 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.