分类: 项目管理
2016-11-08 21:56:31
git的仓库管理是通过gitolite这个开源项目工具来管理的,而他本身也是一个git仓库形式存在。另外,gitolite 采用的是 SSH 协议并且使用 SSH 公钥认证,所以基本上访问仓库就需要公钥的上传。所有的仓库/用户管理都是通过gitolite-admin仓库项目下的/conf/gitolite.conf 文件来配置的,而用户的登录信息是通过往keydir目录下添加公钥实现的。
当管理员更改仓库内容并提交到服务器之后,服务器便有一个事件钩子来处理相关事情,比如建立仓库和用户等。
所以从上面的基本原理,可以大致知道需要做的事情就是安装git,ssh,gitolite,上传管理员的公钥。
yum install openssh-server openssh-client perl --默认的是root用户
yum install git-core
添加专为git相关操作的用户git:
adduser --system --shell /bin/sh --create-home --home-dir /home/git git
添加我们的仓库文件夹,进入/home/git 建立文件夹,并授权给git用户(其实这一步骤,gitolite安装时会帮你搞定的):
cd /home/git
mkdir repositories
授权:
chown git:git ./repositories
chown 700 ./repositories
因为在前面我们创建了git用户,现在切换过去吧:
su – git
git clone git://github.com/sitaramc/gitolite
拉下来后会在当前目录下看到gitolite文件夹吧,那就对了!然后开始安装。
在git用户目录下建立bin文件夹,并将gitolite安装到此目录下面:
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin
如果报错,那就是缺少模块,根据提示少啥就安装啥(请回到root用户来安装哈)。我的错误大概是perl的缺少模块了,那就安装了一下,安装好了回到上面的步骤,直到安装成功:
yum install perl-Time-HiRes
安装完毕之后就回到上面继续安装gitolite吧。
那么至此就是安装算完毕,接下来进行gitolite的配置吧。
gitolite是通过ssh协议的公钥管理来实现身份验证的。所以你可以把你本地电脑的公钥上传上去作为默认的管理员来管理所有的配置信息。那好,回到本地电脑生成公钥(当然你也可以直接在服务器上管理,那就在服务器上生成公钥就好了)。
我是在我的个人电脑上配置的,也就是说我可以在本机管理git服务器。在本地电脑上先看看有没有~/.ssh文件夹,如果有说明已经生成过了,没有就执行下面的操作就好了:
ssh-keygen
你再去看看~/.ssh文件下面应该有id_rsa.pub 和 id_rsa两个文件了吧,其中id_rsa是你的私钥要好好保存的,id_rsa.pub是公钥可以给你要访问的服务器的。现在把公钥复制到服务器上吧:
scp ~/.ssh/id_rsa.pub serverUserName@serverHost:/tmp
上面命令当中的serverUserName和serverHost分别是上面服务器对应的用户帐号和地址,这样就把本地的公钥上传到服务器的/tmp目录下面了。
接下来那么我们回到服务器上面来操作了,开始配置gitolite啦,很简单的。
先转到/tmp目录下面把上传上来的id_rsa.pub重命名”你的管理员账号名.pub”。因为gitolite是根据这个文件名来设立帐号的,比如我会命名为admin:
cd /tmp
mv id_rsa.pub admin.pub(重命名)
然后开始用这个公钥来配置gitolite:(git用户下)
$HOME/bin/gitolite setup -pk admin.pub
就这样安装好了gitolite,你可以进入你的仓库文件home/git/repositories看看,应该增加了两个仓库了文件了gitolite-admin.git 和 test.git。其中前者是管理仓库的,后者是测试用的。
因为管理员设为了本机的,那我们现在回到本机来管理试一下吧!
git clone git@serverHost:gitolite-admin
这时候就不用git用户的密码了吧,这就是ssh协议作用,然后进入仓库可以看到conf和keydir两个文件夹。其中conf/gitolite.conf就是添加用户/仓库的配置文件,keydir目录下就是放置对应用户的公钥的地方。
先来看看我的配置文件:
这样我就有了一个自己的用户组和仓库了,修改好了直接push到服务器,服务器就会自动创建好对应的仓库和用户了,你就好好享受git之旅吧!
git clone //此时若果不出错的话不提示要输入密码的。
大功告成!
Gitolite的授权是通过修改配置文件来进行精细的授权的,文件存放在gitolite-admin.git仓库中,本版本库(gitolite管理版本库)只有 admin 用户有读写和强制更新的权限。
下面我们看一个不那么简单的授权文件:
h3 { margin-top: 0.46cm; margin-bottom: 0.46cm; direction: ltr; color: rgb(0, 0, 0); line-height: 173%; text-align: justify; page-break-inside: avoid; }h3.western { font-family: "Calibri",serif; }h3.cjk { font-family: "Droid Sans Fallback"; }h3.ctl { font-size: 16pt; }p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; }a:link { color: rgb(0, 0, 255); }
下来详解上面的授权指令:
?第1行,定义了用户组 @admin,包含两个用户 jiangxin 和 wangsheng。
?第3-4行,定义了版本库 gitolite-admin。并指定只有用户 jiangxin 才能够访问,并拥有读(R)写(W)和强制更新(+)的权限。
?第6行,通过正则表达式定义了一组版本库,即在 ossxp/ 目录下的所有版本库。
?第7行,用户组 @admin 中的用户,可以在 ossxp/ 目录下创建版本库。
创建版本库的用户,具有对版本库操作的所有权限。
?第8行,所有用户都可以读写 ossxp 目录下的版本库,但不能强制更新。
?第9行开始,定义的 testing 版本库授权使用了引用授权语法。
?第11行,用户组 @admin 对所有的分支和里程碑拥有读写、重置、添加和删除的授权。
?第12行,用户 junio 可以读写 master 分支。(还包括名字以 master 开头的其他分支,如果有的话)。
?第13行,用户 junio 可以读写、强制更新、创建以及删除 pu 开头的分支。
?第14行,用户 pasky 可以读写 cogito 分支。 (仅此分支,精确匹配)。
在 conf/gitolite.conf 授权文件中,可以定义用户组或者版本库组。组名称以 @ 字符开头,可以包含一个或多个成员。成员之间用空格分开。
?例如定义管理员组:
@admin = wanganlei liming
?组可以嵌套:
@staff = @admin @engineers tester1
·定义版本库组
@pre_project = test_project testing