gitolite的部署
gitolite服务部署:
1,在git服务器端安装git并创建git用户。
yum install -y git
useradd git
2,生成gitolite的管理账户,这个账户也可以在git服务器端生成,也可以在自己的客户端生成。(为了防止人员离职,导致管理员丢失,建议在git服务器端生成。我这里是在git服务器端生成管理员用户的)
su - git
ssh-keygen
cp /home/git/.ssh/id_rsa.pub /tmp/admin.pub
多次回车,生成秘钥对,找到~/.ssh/id.rsa.pub 上传到git服务器的/tmp上,并命名为admin.pub
3,切换到git用户,并确保~/.ssh/authorized_keys文件为空或者不存在
rm -f ~/.ssh/authorized_keys
4,安装gitolite
git clone git://github.com/sitaramc/gitolite #下载gitolite软件
mkdir -p $HOME/bin #创建存放gitolite相关命令的目录
gitolite/install -to $HOME/bin #安装gitolite,如果执行这个报错,请先执行 yum install -y perl-Time-HiRes。
echo "PATH=$PATH:$HOME/bin" >> .bashrc #将gitolite命令加入环境变量中,建议退出终端,重新进入。
gitolite setup -pk /tmp/admin.pub #将客户端的用户配置为git的管理员,其实就是将admin.pub的公钥添加到authorized_keys里面去了。
5,查看~/.ssh/authorized_keys 里面是否已经有添加进去的公钥
cat ~/.ssh/authorized_keys
另外,安装完成后,我们可以在$HOME下看到一个repositories目录,里面有两个仓库,分别为gitolite-admin和testing,其中gitolite-admin为管理仓库。
6,克隆gitolite-admin仓库
cd /tmp
git clone git@127.0.0.1:gitolite-admin
进入gitolite-admin仓库,会看到两个目录,分别为keydir和conf,其中keydir目录用来管理用户,在其中可以看到默认有一个文件叫做admin.pub,正是我们之前生成的管理用户的公钥文件.
查看conf里面的配置文件:
[git@iz2ze0n2ws2p2jpw1i9fd4z conf]$ cat gitolite.conf repo gitolite-admin RW+ = admin repo testing RW+ = @all
可以简单的发现 repo 定义仓库名
RW+ 表示权限 可读可写可强制更新
admin 表示admin用户,即admin用户可以对gitolite-admin这个仓库有可读可写可强制更新权限。
7,添加用户
添加用户其实蛮简单,只要在管理员克隆下来的gitolite-admin中,将用户添加到conf/gitolite.conf中,并将要添加用户的pub文件放入keydir中即可,然后push到git服务器中即可。
我这里添加一个xiaobai用户,并设置为管理员。
首先在原来的admin用户下克隆代码(上面已经克隆了):
cd /tmp/gitolite-admin
vim /conf/gitolite.conf
上传xiaobai用户的公钥到keydir中
执行git相关命令,将变化的内容推送到git服务器上。
git add . git commit -m 'add xiaobai user to admin' git push
切换到小白账户,测试创建用户是否成功,克隆代码
git clone git@git服务器地址:gitolite-admin
如下
8,添加仓库,主要是更改gitolite.conf文件,定义1个repo即可。
9,权限说明
常用的配置: 1,定义组 @admin=xiaobai xiaoa #定义一个admin组,组员有xiaobai,xiaoa 2,定义一个仓库 repo spider 3,@all 所有用户 repo spider RW = @all #表示所有用户对spider仓库有读写权限
具体的可以参考如下:
1 @admin = breezey chenliang 2 repo gitolite-admin 3 RW+ = breezey 4 repo ossxp/.+ 5 C = @admin 6 RW = @all 7 repo testing 8 RW+ = @admin 9 RW master = junio 10 RW+ pu = junio 11 RW cogito$ = pasky 12 RW bw/ = linus 13 - = somebody 14 RW tmp/ = @all 15 RW refs/tags/v[0-9] = junio 我们先对该示例文件作一个简单的说明,以方便大家对授权文件有一个基本的了解: 第1行定义了一个admin的组,该组里包含两个用户,分别是breezey chenliang 第2-3行定义了一个版本库gitolite-admin,并且指定breezey用户对gitolite-admin仓库拥有读(R),写(W)和强制更新(+)的权限 第4行通过正则表达式定义了一组版本库,即ossxp目录下的所有版本库 第5行定义admin组的用户可以在ossxp目录下创建版本库 第6行定义所有用户对ossxp目录下的版本库拥有读写的权限,但不能强制更新 第7行定义了一个版本库testing 第8行定义了admin组用户对testing库的所有分支和tag拥有读、写、重置、添加、删除的权限 第9行定义junio用户对master分支有读写的权限,还包括以master开头的所有分支。 第10行定义junio用户对pu分支拥有读写,重置,添加,删除的权限,还包括以pu开头的所有分支 第11行定义pasky用户对cogito分支拥有读写的权限,仅此分支,精确匹配 第12行定义linus用户对bw/拥有读写的权限 第13行定义somebody用户对testing仓库有写的权限 第14行定义所有用户对tmp/拥有读写的权限 第15行定义junio可以读写任意tag,包括以v加上数字开头的tag 组的定义: @admin = breezey chenliang @user = @admin @staff user1 版本库的定义: repo ossxp/.+ #匹配ossxp目录下的所有版本库 repo myrepo.$ #匹配以myrepo.结尾的版本库 repo sandbox/test1 #创建sandbox下的test1库 授权关键字: C: C代表创建。仅在符版本库授权时可以使用。用于指定谁可以创建与通配符匹配的版本库。 R,RW,RW+: R为只读,RW为读写,RW+为读写及强制push RWD,RW+D: 只有当授权指令中定义了正则引用(正则表达式定义的branch、tag等),才可以使用该授权指令。其中 D 的含义是允许删除和正则引用匹配的引用(branch or tag) RWCD,RW+CD: 只有当授权指令中定义了正则引用(正则表达式定义的branch、tag等),才可以使用该授权指令。其中 C 的含义是允许创建和正则引用匹配的引用(branch or tag),D的含义是允许删除和正则引用匹配的引用(branch or tag ) -: 减号(-)是一条禁用指令,只对写操作起作用,不会对用户的读操作施加影响。