原文:http://www.rosoo.net/a/201102/10956.html
环境:
Linode Ubuntu12.04 64位
安装配置git服务器
安装git和openssh:
a@server:~$ sudo apt-get install git-core openssh-server openssh-client
新加用户git, 该用户将作为所有代码仓库和用户权限的管理者:
a@server:~$ sudo useradd -m git a@server:~$ sudo passwd git
建立一个git仓库的存储点:
a@server:~$ sudo mkdir /home/repo
让除了git以外的用户对此目录无任何权限
a@server:~$ sudo chown git:git /home/repo a@server:~$ sudo chmod 700 /home/repo
安装配置gitosis
a@server:~$ git config --global user.name "myname" a@server:~$ git config --global user.email "myname@server"
安装一下python的setup tool, 这个也是为了gitosis做准备:
a@server:~$ sudo apt-get install python-setuptools
获得gitosis包:
a@server:~$ cd /tmp a@server:/tmp$ git clone https://github.com/res0nat0r/gitosis.git a@server:/tmp$ cd gitosis a@server:/tmp/gitosis$ sudo python setup.py install
切换到git用户下:
a@server:/tmp/gitosis$ su git
默认状态下,gitosis会将git仓库放在 git用户的home下,所以我们做一个链接到/home/repo
$ ln -s /home/repo /home/git/repositories
再次返回到默认用户
usr@pc1:~$ ssh-keygen -t rsa
将公钥拷贝到服务器的/tmp下:
usr@pc1:~$ scp .ssh/id_rsa.pub git@<server>:/tmp
回到git服务器上
a@server:/tmp/gitosis$ sudo chmod a+r /tmp/id_rsa.pub
让gitosis运行起来:
a@server:/tmp/gitosis$ sudo -H -u git gitosis-init < /tmp/id_rsa.pub Initialized empty Git repository in /home/repo/gitosis-admin.git/ Reinitialized existing Git repository in /home/repo/gitosis-admin.git/
gitosis的有趣之处在于,它通过一个git仓库来管理配置文件,仓库就放在了/home/repo/gitosis- admin.git。我们需要为一个文件加上可执行权限:
a@server:/home/git$ sudo passwd root a@server:/home/git$ su root@server:/home/git# cd repositories root@server:/home/git/repositories# cd gitosis-admin.git/ root@server:/home/git/repositories/gitosis-admin.git# sudo chmod 755 /home/repo/gitosis-admin.git/hooks/post-update root@server:/home/git/repositories/gitosis-admin.git# exit
在服务器上新建一个测试项目仓库
我们在服务器上新建一个空的项目仓库,叫“teamwork”。
a@server:/home/git$ su – git $ cd /home/repo $ mkdir teamwork.git $ cd teamwork.git $ git init --bare $ exit
但是,到目前为止,这只是一个空仓库,空仓库是不能clone下来的。为了能做clone,我们必须先让某个有权限的人放一个初始化的版本到仓库中。
管理gitosis的配置文件
刚刚提到,gitosis本身的配置也是通过git来实现的。在你自己的开发机里,把gitosis-admin.git这个仓库clone下来,就可以以管理员的身份修改配置了。
usr@pc1:~/work$ git clone git@<server>:gitosis-admin.git
usr@pc1:~/work$ cd gitosis-admin/
该目录下的keydir目录是用来存放所有需要访问git服务器的用户的ssh公钥:
usr@pc1:~/work/gitosis-admin$ su root root@server:/home/a/work/gitosis-admin# cp /path/to/.ssh/id_rsa.pub ./keydir/b.pub root@server:/home/a/work/gitosis-admin# exit
修改gitosis.conf文件,我的配置大致如下:
[gitosis][group gitosis-admin]
writable = gitosis-admin
members = a@server usr@pc1[group hello]
writable = teamwork
members = a@server b[group hello_ro]
readonly = teamwork
members = lz
team组有a,b两个成员,该组对teamwork仓库有读写权限;
team_ro组有lz一个成员,对teamwork仓库有只读权限。
加入新文件、提交并push到git服务器:
usr@pc1:~/work/gitosis-admin$ git add . usr@pc1:~/work/gitosis-admin$ git commit -am “add teamweok prj and users” usr@pc1:~/work/gitosis-admin$ git push origin master
初始化测试项目
usr@pc1:~/work$ mkdir teamwork-ori usr@pc1:~/work$ cd teamwork-ori/ usr@pc1:~/work/teamwork-ori$ git init usr@pc1:~/work/teamwork-ori$ echo "/*add something*/" > hello usr@pc1:~/work/teamwork-ori$ git add . usr@pc1:~/work/teamwork-ori$ git commit -am "initial version" usr@pc1:~/work/teamwork-ori$ git remote add origin git@<server>:teamwork.git usr@pc1:~/work/teamwork-ori$ git push origin master
到此为止teamwork已经有了一个版本了,team的其他成员只要先clone一下 teamwork仓库,就可以任意玩了。
usr@pc1:~/work/teamwork-ori$ su b $ cd /home/b $ git clone git@<server>:teamwork.git $ cd teamwork $ vim hello $ git add . $ git commit -am “b add” $ git push origin master $ exit