安装包:git-2.2.0.tar.gz //可去官网下载http://www.git-scm.com/downloads
# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
# tar zxf git-2.2.0.tar.gz
# cd git-2.2.0
# make prefix=/app/public/git all
# make prefix=/app/public/git install
# ln -s /app/public/git/bin/* /usr/bin/
# yum install git
# adduser git
# passwd git
切换到git用户
# su - git
创建文件夹bin
$ mkdir bin
克隆gitolite源码
$ git clone https://github.com/sitaramc/gitolite.git
$ ls
bin gitolite
安装gitolite
$ ./gitolite/install -to /home/git/bin/
$ ls bin/
commands gitolite gitolite-shell lib syntactic-sugar triggers VERSION VREF
复制管理员的公钥到/tmp下(此处用本机root做管理员,也可以使用其他用户)
# cp /root/.ssh/id_rsa.pub /tmp/admin.pub
切换回git用户,为gitolite配置管理员
# su - git
$ /home/git/bin/gitolite setup -pk /tmp/admin.pub
$ ls
bin gitolite projects.list repositories
# git clone [email protected]:gitolite-admin (192.168.100.1为git服务器IP)
例如我要让jinjj用户访问git服务器上的projectA库
jinjj用户向git服务器管理(此处是之前的服务器本地的root用户)提交自己的ssh无密码公钥
将jinjj用户的公钥命名为jinjj.pub
管理员将jinjj的公钥复制到 gitolite-admin/keydir/ 下
# cp jinjj.pub gitolite-admin/keydir/
管理员创建projectA库,并给jinjj分配权限
# cd gitolite-admin/conf/
# vim gitolite.conf
下边定义projectA库,并且指定用户权限,在原配置文件基础上添加如下内容:
……
@myGroup=admin jinjj //定义myGroup组,包含admin和jinjj2个用户
repo projectA //定义git仓库名为projectA
RW+ = @myGroup //设置权限,这里为具有读写,并且允许推送权限
权限规则解释如下:
R = @test //组test 具有只读权限
- = badboy //禁用指令,让用户badboy只对版本库具有读操作的权限
RW = @dev test1 //组dev, 用户test1对仓库有读写权限
RW+ = @admin //组admin具有读写权限,并且允许强行推送
# git status
# git add gitolite.conf
# git commit -m "AddRepo:projectA;AddUser:jinjj"
# git push origin master
这里补充一点,git的版本库都位于服务器端用户目录下的repositories目录下,这是由.gitolite.rc决定的。
推送成功后,可以看到repositories目录下多了一个projectA的版本库.
$ ls /home/git/repositories
gitolite-admin.git projectA.git testing.git
jinjj用户克隆projectA库
$ git clone [email protected]:projectA
$ ls projectA
由于是新库,里面什么都没有
然后就可以进入到projectA库内,进行创建文件,修改,提交等操作。