系统:Centos 6.4 64bit
首先安装git
# yum -y install git-all
1、新建用户www用于运行web服务,同时由此用户同步文件到网站的目录
2、新建用户git-admin用于管理git的用户(删除、添加)和库(删除、添加、权限管理)
# user add www ; user add git-admin
# echo www|passwd --stdin www ; echo git-admin|passwd --stdin git-admin
3、切换到git-admin并产生密钥对,此密钥对用于git-admin获取shell进行管理
# su - git-admin
# ssh-keygen -f ~/.ssh/admin_shell -P ‘’
4、将公钥添加到www用户的~/.ssh/authorized_keys文件中以实现管理员可以获取shell
# ssh-copy-id -i ~/.ssh/admin_shell.pub www@10.10.11.240
5、再产生另一个密钥对用于git-admin管理用户和库,但不能获取shell,此密钥这里不指定名称,使用默认名称id_rsa
# ssh-keygen -P ‘’
6、将此公钥~/.ssh/id_rsa.pub复制到/tmp/admin.pub以便www用户使用
# cp ~/.ssh/id_rsa.pub /tmp/admin.pub
到目前git-admin已经有两个密钥对了,为了实现git-admin使用不同的服务,而使用相应的密钥,那么这里需要添加个配置文件~/.ssh/config
# cat ~/.ssh/config (此配置文件只是针对管理员,因为普通用户一般不允许获得shell的)
host shell #使用此主机名,将可以获得shell
user www
hostname 10.10.11.240
port 22
identityfile ~/.ssh/admin_shell
host repo #使用此主机名,将不能获得shell
user www
hostname 10.10.11.240
port 22
identityfile ~/.ssh/id_rsa
通过上面的配置git-admin用户可以使用下面命令登录www了
# ssh shell
$ exit
安装gitolite
1、现在切换到www用户安装gitolite
#su - www
$ git clone git://github.com/sitaramc/gitolite
$ mkdir ~/bin
$ gitolite/install -ln
使用管理员的公钥初始化库
$ bin/gitolite setup -pk /tmp/admin.pub
到此gitolite和git安装完成,接下来是用户和库的管理了,需要注意:所有的用户和库的添加和删除都不能在服务器端进行,这些操作都要在客户端进行,当然,说明下,这里我服务端和客户端都在同一机器了,这里git-admin就相当于客户端。好,现在切换到git-admin用户进行管理
1、切换到git-admin,并把服务端的gitolite-admin库克隆下来
# su - git-admin
$ git clone www@10.10.11.240:gitolite-admin.git
或者 $git clone repo:gitolite-admin.git (如果前面的密钥配置正确了,这里是不需要输入密码的)
用户管理
说明:gitolite添加用户不是在服务端直接useradd来添加的,而是通过管理员(如:git-admin)利用各种方式收集用户的公钥 ,并进行规范命名后保存在gitolite-admin/keydir/ 目录下,然后管理员进行git add ,git commit,最后最重要的一步git push,这样才算真正添加完成用户。下面添加一个用户logan:
1、利用各种方式获得logan的公钥,并将其置于gitolite-admin/keydir/目录下
2、进行添加用户操作
$ git add gitolite-admin/keydir/logan.pub
$ git commit -a -m ‘Add an user named “logan”’
$ git push repo:gitolite-admin.git
如果要删除logan用户,则也是通过git-admin删除gitolite-admin/keydir/logan.pub,然后再进行提交更新,操作如下
$ git rm gitolite-admin/keydir/logan.pub
$ git commit -a -m ‘Remove user logan’
$ git push repo:gitolie-admin.gi
库管理
说明:管理库也不能在server端直接操作(当删除一个库时,需要登录server端删除相应库的目录,后面有演示),库的添加、删除方法也类似于用户,库的管理通过修改gitolite-admin/conf/gitolite.conf 进行管理 ,下面添加两个库blog和www
$ cat conf/gitolite.conf
repo gitolite-admin
RW+ = admin
repo testing
RW+ = @all
repo blog
RW+ = admin
RW = @all
repo www
RW+ = admin
RW = @all
$ git add conf/gitolite.conf
$ git commit -a -m 'Add two repositories -- blog & www'
$ git push repo:gitolite-admin.git
自动部署
有这样的需求,www这个项目,要求用户每次push后,www自动部署到/data/www目录,这个目录是web代码存放的目录,这里可以利用/home/www/repositories/www.git/hook目录下的post-receive脚本实现,脚本内容如下
$ cat /home/www/repositories/www.git/hooks/post-receive
#!/bin/bash
unset GIT_DIR
GIT_WORK_TREE=/home/www/codes/www
DEPLOY_DIR=/data/www
cd $DEPLOY_DIR
git pull /home/www/repositories/www.git
DATE=`date +"%F %T"`
if [ $? -eq 0 ];then
echo "$DATE: The www deployment was successful!" >> /var/log/git.log
else
echo "$DATE: The www deployment was unsuccessful!" >> /var/log/git_err.log
fi
这样,当用户push后,www的代码就会自动部署到/data/www目录下了
好了,目前只有git-admin一个管理员,现在要把logan提升为管理员
1、切换到git-admin,编辑/home/git-admin/gitolite-admin/conf/gitolite.conf, 对应修改下面行
# cat /home/git-admin/gitolite-admin/conf/gitolite.conf
@admin = admin logan
repo gitolite-admin
RW+ = @admin
# git add /home/git-admin/gitolite-admin/conf/gitolite.conf
# git commit -a -m ‘Promoted logan to the administrator’
# git push repo:gitolite-admin