在Ubuntu系统中搭建Git服务器,特别是使用gitosis作为版本控制系统管理工具,是一个常见的做法,尤其适合小型团队或个人开发者协作项目。以下将详细介绍这个过程。
我们需要进行一些准备工作。在Mac上安装VMware虚拟机,并在其内部安装Ubuntu 11.10操作系统。更新系统软件包库是非常重要的一步,这可以通过运行`sudo apt-get update`和`sudo apt-get upgrade`来实现,以确保我们安装的都是最新的软件。
接下来,我们要安装SSH服务,这是Git通信的基础。在Ubuntu中,通过`sudo apt-get install openssh-server`命令可以安装OpenSSH服务器。安装后,可能需要根据项目需求修改SSH配置文件`/etc/ssh/sshd_config`,然后重启SSH服务,命令为`sudo /etc/init.d/ssh restart`。
紧接着,我们需要安装Git以及相关的图形化工具,如gitk和git-gui。这可以通过执行`sudo apt-get install git-core gitk git-gui`来完成。这些工具将帮助我们在本地和服务器端进行Git操作。
接着,安装Python环境,因为gitosis依赖于Python。使用`sudo apt-get install python-setuptools`来安装。
现在可以安装gitosis了。在任意目录下创建一个新目录,然后克隆gitosis的Git仓库:`git clone git://eagain.net/gitosis.git`,进入目录并运行`sudo python setup.py install`来安装gitosis。
安装完成后,需要创建一个新的系统账户,用于管理Git仓库。我们使用`sudo useradd –m git`创建账户,并设置密码`sudo passwd git`。
在拥有Git管理账户的PC上,我们需要生成管理员的SSH密钥,使用`ssh-keygen -t rsa`命令。然后将生成的公钥(id_rsa.pub)上传到服务器,可以通过`scp ./ssh/id_rsa.pub gitserver@IP:id_rsa.pub`来完成。
回到服务器,切换到git用户,并初始化gitosis。首先确保id_rsa.pub文件有读写权限,运行`sudo chmod 777 id_rsa.pub`,然后运行`sudo -H -u git gitosis-init < id_rsa.pub`。这会在`/home/git`目录下创建`gitosis`目录,其中包含`repositories`(存放gitosis-admin.git仓库)和`keydir`(存放所有用户的公钥)。
至此,gitosis的安装已完成。但为了允许访问gitosis-admin.git仓库,需要修改`hooks/post-update`文件的权限,使用`sudo chmod 755 /home/repositories/gitosis-admin.git/hooks/post-update`。
接下来,我们可以创建新的Git仓库。例如,创建一个名为`test.git`的仓库,通过`mkdir /home/git/git_repo/test.git`和`cd /home/git/git_repo/test.git`,然后运行`sudo git --bare init`。
在Git管理账户的PC上,我们需要克隆gitosis-admin.git仓库,`git clone git@IP:gitosis-admin.git`,这样就可以编辑权限设置。打开`gitosis.conf`文件,配置仓库访问权限,例如:
```conf
[gitosis]
gitweb = yes
[group gitosis-admin]
writable = gitosis-admin
members = tianlinwen@Tianlinewn-OfficeMBP.local
[group deve]
writable = test
members = tianlinwen@Tianlinwen-OfficeMBP.local tianlinwen@Tianlinwen-OfficeMBP.local
gitweb = yes
```
这里,我们创建了两个组,一个是gitosis-admin,拥有对gitosis-admin仓库的写权限;另一个是deve,对test仓库有写权限。配置好后,使用`git commit -a -m ''`提交更改,然后`git push origin master`将变更推送到服务器。
通过以上步骤,我们就成功地在Ubuntu系统上搭建了一个基于gitosis的Git服务器,可以为不同的用户和团队分配不同的权限,方便协作开发。