管理git-主分支推送权限

管理git-主分支推送权限,git,Git,有没有一种简单的方法来配置我们的git repo,只允许预定义的一组用户推送到origin上的主分支 我发现某些工具需要为这样的任务付费,但我想知道git是否默认支持这一点,而不需要git服务器工具 欢迎提出任何意见和指示 Git没有自己的权限系统。您将不得不使用其他方法来管理它们。您还可以使用git钩子构建自己的钩子。一个简单的解决方案是编写一个自定义钩子来侦听每个更新,并拥有一个自定义身份验证解决方案 在.git文件中有一个钩子目录,其中包含自定义钩子的示例实现。删除.sample后缀只会使

有没有一种简单的方法来配置我们的git repo,只允许预定义的一组用户推送到origin上的主分支

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


欢迎提出任何意见和指示

Git没有自己的权限系统。您将不得不使用其他方法来管理它们。您还可以使用git钩子构建自己的钩子。

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

在.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

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

您可以使用linux或windows用户权限访问您的目录,origingitlab是一个免费的git服务器,非常好。您可以看看这个答案:可能的重复是否可以使用git bash设置分支权限?不是我要求的复制品。要回答我的问题,需要指导我如何在服务器端编写一个预接收钩子来接受一组硬编码用户,我应该通过stdin获得这些用户;但是这需要时间,如果使用gitlab,你可以以非常快的方式拥有一切,为什么要重新发明轮子呢?谢谢你的回复,不过我需要更多关于如何编写预接收挂钩的详细信息。我们通过基本http进行身份验证。我不知道我将如何从服务器端接收STDIN的信息,这些信息包含了AuthStudio,也就是说,你提到的工具在我们的情况下是希望支付的,我不能认为它们是可行的解决方案,即使它们不需要支付,你可以在自己的服务器上安装GitLab Community Edition和gitolite,而无需支付任何费用。如果你真的想自己动手,那就从开始吧。再说一次,我们已经有了git服务器。改变它需要很多努力,不仅是在技术上,而且是在官僚层面。因此,在我们的例子中,一个简单的钩子脚本将是一个更好的解决方案。欢迎向那里问路。