现在越来越多的开源项目使用git来进行管理,而git是分布式的,没有严格的界限来区分客户端和服务器,而我们习惯上都需要有一台服务器来控制的,故而接下来的实验中会使用一台机器来作为服务器角色并在上面安装上Gitosis的权限管理系统(当然也可以使用Gitolite),此次我们的实验环境是VMware上面安装了Ubuntu的虚拟机1台(同时充当服务器和客户端),下面是整个实验过程的记录:
1.安装上git工具(服务器和客户端都须安装):
sudo apt-get install git-core
2.安装Gitosis(仅服务器上需要安装):
sudo apt-get install python-setuptools
mkdir ~/src
cd ~/src
git clone https://github.com/res0nat0r/gitosis.git
cd gitosis/
sudo python setup.py install
3.创建一个git帐号(仅服务器上):
sudo adduser --system --shell /bin/sh --gecos 'git version control' --group --disabled-password --home /home/git git
4.生成SSH密钥对(仅客户端上):
ssh-keygen
命令执行过程中全部按“回车”键默认配置,最终会在~/.ssh目录下生成id_rsa和id_rsa.pub一对密钥。接下来将生成的id_rsa.pub公钥复制到服务器上(一般使用scp命令,由于我们在同一台机器,故该步省略)
5.将公钥导入初始化gitosis(在服务器上)
sudo -H -u git gitosis-init < ~/.ssh/id_rsa.pub
运行该命令后有如下提示(上述公钥对应的用户用于默认情况下的gitosis库管理员):
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
此时我们的公钥将会被导入到/home/git/repositories/gitosis-admin.git/gitosis-export/keydir目录下,名称为xinu@x-slam.pub,该名字可随意更改,只要与配置文件/home/git/repositories/gitosis-admin.git/gitosis.conf里内容一致即可,配置文件默认内容如下:
[gitosis]
[group gitosis-admin]
members = xinu@x-slam
writable = gitosis-admin
从上面内容可看出,我们可以分组管理来配置权限。
6.修改gitosis权限
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
主要作用是当更新gitosis-admin库时要更新服务器上的gitosis-export目录需要有权限。
7.管理项目与用户
对于刚才安装好的gitosis权限管理服务,我们不能在服务器上直接修改相关配置,于是我们会在客户端先将该管理工程克隆下来:
git clone git@127.0.0.1:gitosis-admin.git
其中,git@127.0.0.1中git为用户名,而127.0.0.1是服务器IP,gitosis.git是项目名,运行上面命令会有如下提示:
ssh: connect to host 127.0.0.1 port 22: Connection refused
fatal: The remote end hung up unexpectedly
是由于服务器端没有安装SSH服务导致,于是执行如下命令进行安装:
sudo apt-get install openssh-server
接下来再在客户端重新执行克隆操作命令,会在当前目录下生成gitosis-admin目录,该目录下有gitosis.conf配置文件和keydir目录,以后我们通过将新用户的公钥放至keydir目录,并个性gitosis.conf文件,再将其通过git add、git commit和git push命令更新服务器上的相应文件即可添加新服户了。
那么要如何创建自己的项目并上传到服务器上呢?首先先要修改下权限:
修改上面克隆下来的gitosis-admin目录下的gitosis.conf文件,将writable = gitosis-admin修改为writable = gitosis-admin ourProject,然后保存后再执行如下命令:
git commit -m "Add ourProject permission"
git push
下面是相应的步骤(均在客户端下操作):
1).创建目录ourProject:
mkdir ourProject
2).进入创建的目录并创建一文件:
cd ourProject
echo "test" > xinu
3).创建git本地库:
git init
4).将xinu文件添加到本地库中:
git add xinu
5).将添加的文件提交到本地库中:
git commit -m "Add new project and file 'xinu'"
6).创建远程库
git remote add origin git@127.0.0.1:ourProject.git
7).将本地库上传到远程库
git push origin master
成功上传后,在服务器的/home/git/repositories目录下会多出ourProject.git目录,这就是我们刚创建的工程了。至此,使用Gitosis来搭建可权限管理的Git服务器就体验了一次,后面再找个时间好好学习下gitosis.conf配置文件的规则和使用repo来创建库的过程了。