因为后面要采用Git代替Subversion,花了点时间配置了Git服务端和客户端,像以前一样,仍然基于最新的Ubuntu11.10 server/desktop系统。
注意,Git是分布式管理工具,因此没有真正的Server,本文用了三台机器,分别是
S1 代表 机房里面的Ubuntu 11.10 server
C1 代表 第一台拥有管理权限的 Ubuntu desktop
C2 代表 后来被添加进来的拥有管理权限的Ubuntu desktop
三台机器都可以看作是服务器。只是从方便人使用的角度,总是将项目文件提交到S1上,并从S1上获得最新项目文件。
1.Ubuntu server安装Git服务程序
下文称这台Ubuntu server为S1
[plain]
sudo apt-get install git-core 2.S1上安装Gitosis程序.Gitosis是一个工具程序,可以帮助我们进行Git仓库的访问控制和远程管理。
[plain]
sudo apt-get install Python-setuptools mkdir ~/src cd ~/src git clone git://eagain.net/gitosis.git cd gitosis sudo python setup.py install3.S1上创建一个git帐号。
没有密码。这个帐号是给Gitosis程序使用的。
[plain]
sudo adduser \ --system \ --shell /bin/sh \ --gecos 'git version control' \ --group \ --disabled-password \ --home /home/git \ git4.安装远程管理客户端
下文将第一个远程管理客户端称为C1
[plain]
sudo apt-get install openssh-client ssh-keygen 如果没有安装openssh-client,才需要第一行命令。ssh-keygen命令会创建公钥和私钥文件。将公钥文件复制到服务端。然后在S1上导入到Gitosis中以后C1就无需用户名和密码便能通过SSH连接服务端了。
[plain]
scp /home/chenshu/.ssh/id_rsa.pub cncm@S1:/home/cncm sudo -H -u git gitosis-init < /home/cncm/id_rsa.pub 得到下面的结果:Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
意思是S1上已经成功创建了仓库目录,路径是/home/git/repositories,并且里面还创建了一个管理员仓库,叫gitosis-admin。
修改S1上一个文件的权限:
[plain]
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update从S1上clone出gitosis-admin仓库到C1:
[plain]
/home/chenshu/my_git cd ~/my_git
[plain]
git clone git@S1:gitosis-admin.git Cloning into gitosis-admin... remote: Counting objects: 5, done. remote: Compressing objects: 100% (4/4), done. remote: Total 5 (delta 1), reused 5 (delta 1) Receiving objects: 100% (5/5), done. Resolving deltas: 100% (1/1), done.现在你可以通过修改gitosis-admin/gitosis.conf文件来远程管理S1上的仓库:
[plain]
[gitosis] [group gitosis-admin] members = chenshu@chenshu-System-Product-Name writable = gitosis-admin上面是之前gitosis初始化导入C1的公钥的时候自动创建的,已经将C1的用户加入到管理员成员中