参考:http://www.open-open.com/lib/view/open1349849744275.html
在配置gitosis之前,服务器需要先安装git server,见前一篇文章。
环境:server:CentOS 6
client:CentOS 6
1、在服务器安装gitosis
#yum install python python-setuptools
#cd /usr/local/src
#git clone git://github.com/res0nat0r/gitosis.git
#cd gitosis
#python setup.py install
#显示Finished processing dependencies for gitosis==0.2即表示成功
2、创建git用户,并设置密码
#adduser git
#passwd git
3、创建git目录,并设置权限
#cd /home
#mkdir git
#chown git:git /home/git
4、从客户端生成公钥,上传到服务器,并设置好访问权限
客户端:
#cd ~
#mkdir .ssh
#cd .ssh
#ssh-keygen
#scp ~/.ssh/id_rsa.pub
[email protected]:/tmp
服务器端:
#cd /tmp
#chown git:git id_rsa.pub
5、切换到git用户,并初始化git库
#su git
$gitosis-init < /tmp/id_rsa.pub
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
修改上传权限:
$su -
#chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
6、在服务器端创建一个空库
(网上有的帖子说不需要再服务器端创建空库,客户端第一次提交的时候会自动创建,但我试了几次,如果服务器端不创建空库,客户端push会一直提示git库路径不对)
#su git
$cd /home/git/repositories
$git init --bare test-git
Initialized empty Git repository in /home/git/repositories/test-git/.git/
7、在客户端配置管理用户
#mkdir -p /home/client_project
#cd /home/client_project
#git clone
[email protected]:/home/git/repositories/gitosis-admin
#cd gitosis-admin
引用
gitosis-admin目录下keydir是存放客户端公钥的,gitosis.conf是记录各个仓库项目的管理用户。需要注意,keydir目录下的公钥的文件名,需要与公钥文件(.pub)中最后的名字一致。
为项目添加用户:
用户客户端的公钥文件放在keydir目录下,再修改gitosis.conf文件。假设给test-git-new项目添加mender用户:
#cp /tmp/mender.pub /home/client_project/gitosis-admin/keydir
#vi gitosis.conf
引用
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = root@GitClient
[group test-git-new]
writable = test-git-new
members = root@GitClient
mender
#git add .
#git commit -am "add member mender"
#git push
8、把客户端文件推到服务器
第6步已经在服务器端创建了空库,指定好远程库路径,把文件推上去:
客户端:
#cd /home/client_project/
#mkdir test-git-new
#cd test-git-new
#git init
#touch Readme
#git add Readme
#git commit -am 'first commit'
#git remote add origin
[email protected]:/home/git/repositories/test-git
#git push origin master
这样客户端就可以push文件了
==========================================
用gitosis管理git用户,不需要执行cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys ,gitosis自动会给authorized_keys 追加公钥。但是用客户端执行的时候,有时会出现ERROR:gitosis.serve.main:Repository read access denied错误,网上说是keydir目录下的pub文件名与gitosis.conf配置里的members名字必须要对应,但即使对应可能还会出这个问题,还有个原因可能如下:
路径:没用gitosis管理git时,clone路径是绝对路径,例如:git clone
[email protected]:/home/git/repositories/px_andriod,出错之后改成git clone
[email protected]:px_andriod.git就好了。(创建空仓库的时候,mkdir px_andriod.git,gitosis.conf中写的还是px_andriod)