使用gitosis配置git server
参考:http://www.open-open.com/lib/view/open1349849744275.html
在配置gitosis之前,服务器需要先安装gitserver,见前一篇文章。
环境:server:CentOS6
client:CentOS6
1、在服务器安装gitosis
#yuminstallpythonpython-setuptools
#cd/usr/local/src
#gitclonegit://github.com/res0nat0r/gitosis.git
#cdgitosis
#pythonsetup.pyinstall
#显示Finishedprocessingdependenciesforgitosis==0.2即表示成功
2、创建git用户,并设置密码
#addusergit
#passwdgit
3、创建git目录,并设置权限
#cd/home
#mkdirgit
#chowngit:git/home/git
4、从客户端生成公钥,上传到服务器,并设置好访问权限
客户端:
#cd~
#mkdir.ssh
#cd.ssh
#ssh-keygen
#scp~/.ssh/[email protected]:/tmp
服务器端:
#cd/tmp
#chowngit:gitid_rsa.pub
5、切换到git用户,并初始化git库
#sugit
$gitosis-init</tmp/id_rsa.pub
InitializedemptyGitrepositoryin/home/git/repositories/gitosis-admin.git/
修改上传权限:
$su-
#chmod755/home/git/repositories/gitosis-admin.git/hooks/post-update
6、在服务器端创建一个空库
(网上有的帖子说不需要再服务器端创建空库,客户端第一次提交的时候会自动创建,但我试了几次,如果服务器端不创建空库,客户端push会一直提示git库路径不对)
#sugit
$cd/home/git/repositories
$gitinit--baretest-git
InitializedemptyGitrepositoryin/home/git/repositories/test-git/.git/
7、在客户端配置管理用户
#mkdir-p/home/client_project
#cd/home/client_project
#[email protected]:/home/git/repositories/gitosis-admin
#cdgitosis-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
#vigitosis.conf
[gitosis]
[groupgitosis-admin]
writable=gitosis-admin
members=root@GitClient
[grouptest-git-new]
writable=test-git-new
members=root@GitClientmender
#gitadd.
#gitcommit-am"addmembermender"
#gitpush
8、把客户端文件推到服务器
第6步已经在服务器端创建了空库,指定好远程库路径,把文件推上去:
客户端:
#cd/home/client_project/
#mkdirtest-git-new
#cdtest-git-new
#gitinit
#touchReadme
#gitaddReadme
#gitcommit-am'firstcommit'
#[email protected]:/home/git/repositories/test-git
#gitpushoriginmaster
这样客户端就可以push文件了
==========================================
用gitosis管理git用户,不需要执行cat/tmp/id_rsa.pub>>~/.ssh/authorized_keys,gitosis自动会给authorized_keys追加公钥。但是用客户端执行的时候,有时会出现ERROR:gitosis.serve.main:Repositoryreadaccessdenied错误,网上说是keydir目录下的pub文件名与gitosis.conf配置里的members名字必须要对应,但即使对应可能还会出这个问题,还有个原因可能如下:
路径:没用gitosis管理git时,clone路径是绝对路径,例如:[email protected]:/home/git/repositories/px_andriod,出错之后改成[email protected]:px_andriod.git就好了。(创建空仓库的时候,mkdirpx_andriod.git,gitosis.conf中写的还是px_andriod)