再谈git的http服务-权限控制hooks版

Posted Badwood-涂鸦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再谈git的http服务-权限控制hooks版相关的知识,希望对你有一定的参考价值。

  通过git-http-backend方法提供的http服务基本上可以做到认证用户才能使用,但只能控制到服务器路径访问,而且无法区分读写。经过不懈努力,找到了方法,但涉及到脚本编写,暂时未有成熟版本提供

  基本思路就是利用apache的路径权限设置控制版本库的读权限;通过hooks/pre-receive钩子来控制版本库的写权限,具体钩子的原理和用户这里不写了。git提供了几个全局变量可以在pre-receive钩子里面使用,详情可以参看git-http-backend manual page

  通过REMOTE_USER获取执行push的用户名,通过PATH_INFO获取项目名称。

  附上我的未完成pre-receive:

#!/bin/sh
read old new refname
echo "pre-receive called"
#git log
echo "REMOTE_USER: " $REMOTE_USER
echo "REQUEST_METHOD: " $REQUEST_METHOD
echo "PATH_INFO:" $PATH_INFO
echo "CONTENT_TYPE: " $CONTENT_TYPE
echo "QUERY_STRING: "$QUERY_STRING
#return 1 to deny push,0 to accept push
exit 1

  以及apache的git.conf相应内容:

#config for git-http-backend
SetEnv GIT_PROJECT_ROOT /git/repositories
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /mygit/ /usr/libexec/git-core/git-http-backend/

#privilege config
<Location /mygit/test>
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /git/repositories/git.passwd
    AuthGroupFile /git/repositories/git.group
    <Limit GET PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
        Require group test-write
    </Limit>
</Location>

   /git/repositories/git.group如下:

test-read:bill jobs
test-write:jobs

 

以上是关于再谈git的http服务-权限控制hooks版的主要内容,如果未能解决你的问题,请参考以下文章

再谈git的http服务

Git Hooks简介

Git服务器,仓库的hook监控

git学习

CentOS7安装配置svn及svn hook实战

git hook 自动部署