参考资料:html
http://www.ossxp.com/doc/Git/gitolite.html前端
架设环境debian squeeze,全部安装软件均为debian源上自带。git
主要参考文献:github
一、蒋鑫做品http://www.ossxp.com/doc/git/gitolite.html (堪称中文入门手册)web
二、Gitolite自带文档https://github.com/sitaramc/gitolite/tree/master/doc (仔细阅读自带文档,会帮助解决细节问题)正则表达式
三、Gitolite WIKI http://sitaramc.github.com/gitolite/ shell
Gitolite安装:apache
一、安装软件bash
sudo apt-get install gitolite git-core服务器
二、产生G管理员的ssh key
肯定某个帐号,能够是server上的帐号,也能够是某个客户端的帐号,可是只能是惟一的。
在该帐号下,用ssh-keygen产生ssh key。
在终端下运行ssh-keygen,默认在~/.ssh下产生文件 id_rsa.pub。
将这个文件放到服务器/tmp/下,命名为admin.pub。
二、创建git专用帐号
sudo adduser --system --shell /bin/bash --group git
sudo adduser git ssh
sudo passwd git
之后上传下载工做都经过该帐号进行,可是不直接使用该帐号登录,而是经过ssh key的认证。原理见文献1。
三、创建Gitolite仓库
su git进入git帐号
gl-setup /tmp/admin.pub以admin.pub的帐号为管理员,创建Gitolite仓库。
这时会在git帐号下产生repositories目录,下面有两个子目录gitolite-admin.git和testing.git
四、初涉Gitolite管理
在G管理员帐号下,运行 git clone git@server_ip:gitolite_admin.git
这样在G管理员账号下,就有一个gitolite_admin的文件夹,里面是管理gitolite仓库的配置文件和Key文件。
增长用户:
将某人的ssh key文件abc.pub,复制到gitolite_admin/Keydir下;
而后 git add Keydir/abc.pub
git commit -m 'add abc'
git push origin master
这样就添加好了abc用户。
Gitolite是管理git用户的,但Gitolite自己又是经过git来操做的。颇有意思吧!
相信删除的方法不用我讲了吧!
配置用户权限:
Gitolite是用来管理用户行为的,这个有conf/gitolite.conf完成。
下面全部例子来自参考文献1。因为个别地方已不适用,因此稍做修改。
下面咱们看一个简单的受权文件:
<span style="color: rgb(153, 153, 153);">1 @admin = jiangxin wangsheng 2 3 repo gitolite-admin 4 RW+ = jiangxin 5 6 repo ossxp/..* 7 C = @admin 8 RW = @all 9 10 repo testing 11 RW+ = @admin 12 RW master = junio 13 RW+ pu = junio 14 RW cogito$ = pasky 15 RW bw/ = linus 16 - = somebody 17 RW tmp/ = @all 18 RW refs/tags/v[0-9] = junio</span>
在上面的示例中,咱们演示了不少受权指令。
第1行,定义了用户组 @admin,包含两个用户 jiangxin 和 wangsheng。
第3-4行,定义了版本库 gitolite-admin。并指定只有用户 jiangxin 才可以访问,并拥有读(R)写(W)和强制更新(+)的权限。
第6行,经过正则表达式定义了一组版本库,即在 ossxp/ 目录下的全部版本库。
第7行,用户组 @admin 中的用户,能够在 ossxp/ 目录下建立版本库。
建立版本库的用户,具备对版本库操做的全部权限。
第8行,全部用户均可以读写 ossxp 目录下的版本库,但不能强制更新。
(注意:RW和C分开两行是指软件仓库的权限,RWC在一行是分支的权限。见gitolite文档wildcard-repositories.mkd)
第9行开始,定义的 testing 版本库受权使用了引用受权语法。
第11行,用户组 @admin 对全部的分支和里程碑拥有读写、重置、添加和删除的受权。
第12行,用户 junio 能够读写 master 分支。(还包括名字以 master 开头的其余分支,若是有的话)。
第13行,用户 junio 能够读写、强制更新、建立以及删除 pu 开头的分支。
第14行,用户 pasky 能够读写 cogito 分支。 (仅此分支,精确匹配)。
五、添加版本库
a、建一个空版本库
只须要在conf/gitolite.conf中添加一个规则,好比
repo work1
RW+=@all
这样gitolite就会自动建立一个空的版本库。
b、上传已有版本库
如上面的例子第6~8行中设定的规则,能够由admin(或指定其余帐号),在指定目录下上传版本库。
在本机的版本库下执行:
git remote add r-server git@server_ip:ossxp/repo.git
git push r-server master
即推送完成。
六、高级管理
在4里,提到了大部分权限管理的状况。若是还不够用,就要进入通配符受权:
a、用户私有版本库
受权文件以下:
<span style="color: rgb(153, 153, 153);">1 @administrators = jiangxin admin 2 3 repo users/CREATOR/.+$ 4 C = @all 5 R = @administrators </span>
说明:用户能够在本身的名字空间( /users/<userid>/ )下,本身建立版本库。
CREATOR是全部用户的通配符。建立者对版本库有最高权限,其余人只有读权限(固然能够另外设置)。
b、用户私有分支
受权文件:
<span style="color: rgb(153, 153, 153);">repo test/repo4 RW+ dev/USER/ <span style="white-space: pre;"> </span>= @all RW+ master <span style="white-space: pre;"> </span>= @dev </span>
说明:
七、Gitweb
上述操做的结果都没有直观的显示,这对未来的用户会形成必定的了解障碍。
这个障碍能够经过Gitweb来克服。Gitweb是一个网页前端,它的工做就是将git仓库的内容用网页形式展示出来。(如git.kernel.org上密密麻麻的仓库与分支)
这样开发者会更清楚地知道,去找本身须要的东西。
一、安装软件
sudo apt-get install gitweb
二、修改/etc/gitweb.conf
$projectroot = "/data/git-repo" <-- 此处应该是gitolite仓库的位置。我将以前git帐号下的repositories移出来了,而后作了个连接回去(ln -s /data/git-repo /home/git/repositories)。
三、配置web
修改/etc/apache2/sites-available/default
我将原来的/var/www的内容换成了:
DocumentRoot /var/www
<Directory /var/www>
Options ExecCGI Indexes +FollowSymLinks MultiViews
Order allow,deny
Allow from all
AllowOverride all
AddHandler cgi-script cgi
DirectoryIndex gitweb.cgi
SetEnv GITWEB_CONFIG /etc/gitweb.conf
</Directory>
而后,在/var/www下执行
sudo ln -s /usr/share/gitweb/* .
sudo ln -s gitweb.cgi index.html
这样进入http://server-ip就能够看到相似git.kernel.org的东东了。
对了,别忘了修改仓库的权限(chmod a+x /data/git-repo -R)
四、将www-data加入git组