2015-03-03 180 views
1

有没有一种简单的方法来配置我们的git仓库,这种方式只允许预先定义的一组用户在原产地推入主分支?管理git - 主分支推送权限

我发现某些工具需要为这样的任务付款,但想知道这是否默认支持git,而不需要git服务器工具。

任何意见和指示将受到欢迎。

+0

你可以使用你的linux或windows用户的权限来源于你的目录 – 2015-03-03 11:37:39

+0

gitlab是一个免费的git服务器,这是非常好的。你可以看看这个答案:http://stackoverflow.com/a/22906383/2082964 – 2015-03-03 11:39:17

+0

可能重复的[git分支权限](http://stackoverflow.com/questions/13248246/git-branch-permissions) – 2015-03-03 11:40:02

回答

1

一个简单的解决方案是编写一个自定义钩子来监听每个更新并拥有一个自定义身份验证解决方案。

在.git文件中有一个挂钩目录,其中包含自定义挂钩的示例实现。删除.sample后缀将使该钩子变得可操作(默认情况下钩子示例有回调注册)。

更新挂钩将在每次推送后触发,退出1将简单地禁止该推送被应用。一些线上的:

refname="$1" 
oldrev="$2" 
newrev="$3" 

author="$(git log $newrev -1)" 

# user names on the white list 
whitelist=('Admin1' 'Admin2' 'Admin3' ) 

# branches to be controlled 
master="refs/heads/master" 
test="refs/heads/test" 

if [[ "$refname" == "$master" || "$refname" == "$test" ]] 
then 
       for name in "${whitelist[@]}" 
       do 
           echo $name 
           if [[ "$author" == *"$name"* ]] 
           then 
               exit 0 
           fi 
       done 
else 
       exit 0 
fi 

echo "Master or test branch is not within your reach ! Contact your supervisor ! " 
exit 1 

我强烈建议您根据您的身份验证策略编写自己的脚本。上面的脚本只是给出一个想法,并且很容易被破解。

0

Git没有自己的权限系统。您将不得不使用其他方式来管理它们,如GitLabgitolite。你也可以使用git hook来构建你自己的。

+0

Thx为您的答复,但我需要更多的细节,我如何可以写一个预先接受钩。我们通过基本的http进行认证。我没有看到我将如何从服务器端接收携带auth信息的stdin参数。 – Pumpkin 2015-03-03 15:06:41

+0

这就是说,您提到的工具在我们的案例中希望付款,而且即使他们不需要付款,我也不能认为这些解决方案是可行的解决方案,请参阅其他选项。 – Pumpkin 2015-03-03 15:07:54

+0

你可以在你自己的服务器上安装GitLab Community Edition和gitolite,而无需支付任何费用。如果你真的想要推出自己的产品,首先阅读文档(http://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols)。 – orkoden 2015-03-03 15:39:29