管理Gitolite,管理员的任务就比较繁重了,其所有的管理都是通过安装gitolite是自动创建的gitolite-admin库来操作的,下面就几个常用的管理任务作简单介绍。
1. 管理员克隆gitolite-admin管理库
git+gitolite的安装与配置参见搭建Git服务器(二),安装后在gitadmin管理员用户目录下在自动创建一个用于自身管理的git库:gitolite-admin.git。管理员可以通过git出该管理库,在客户端进行管理。
$git clone gitadmin:gitolite-admin //此处使用的是SSH主机别名,会在当前目录下创建gitolite-admin
gitolite-admin 目录下有两个目录conf/ 和 keydir/ 。
l keydir/gitadmin.pub 文件,目录 keydir 下初始时只有一个用户公钥,即 amdin 用户的公钥。
l conf/gitolite.conf 文件,该文件为授权文件。初始内容为:
#gitolite conf
# please seeconf/example.conf for details on syntax and features
repo gitolite-admin
RW+ = gitadmin
repo testing
RW+ = @all
缺省授权文件中只设置了两个版本库的授权:
l gitolite-admin,即本版本库(gitolite管理版本库)只有 admin 用户有读写和强制更新的权限。
l Testing,缺省设置的测试版本库,设置为任何人都可以读写以及强制更新。
2. 增加新用户
只要将新用户的公钥添加到 gitolite-admin 版本库的 keydir 目录下,即完成新用户的添加。假设需要增加用户名为gituser的用户。
(1)管理员从用户那获得公钥gituser.pub。该公私钥文件的生成:
$ssh-keygen –f ~/.ssh/gituser //客户端执行
(2)将该gituser.pub放到gitolite-admin本地的管理库用的keydir目录下。
$cp ~/.ssh/gituser.pub /pathto/keydir/
(3)将该公钥加入版本库中
$git add /pathto/keydir
$git status
#On branch master
#Changes to be committed:
# (use “git reset HEAD <file>…” to unstage)
#
# new file: keydir/gituser.pub
#
(3)提交对版本库的修改
$git commit –m “add user:gituser”
(4)push到服务器,完成同步,真正添加新用户
$git push //会有WARNING,其中的警告是说新添加的三个用户在授权文件中没有被引用,下面修改授权文件,为用户受权。
(5)为gituser创建SSH主机别名,回到客户端$vi ~/.ssh/config,添加以下内容:
host gituser
user gitadmin
hostname labserver
port 22
identityfile ~/.ssh/gituser
3. 更改授权文件,为用户授权
新用户添加完毕,需要重新进行授权。更改授权的方法也非常简单,即修改 conf/gitolite.conf 配置文件,提交并 push。
(1)管理员进入 gitolite-admin 本地克隆版本库中,编辑 conf/gitolite.conf
$vi conf/gitolite.conf
在打开的文件顶部添加:@team1 = gituser gitadmin,然后在repo testing 下添加:
RW+ = @team1 对testing版本库以team的形式进行授权。(team又是可以嵌套如:
@allteam = @team1 @team2 @team3。对team的所有定义规则都适应于版本库,如:
@repo1 = project1 project2, repo @repos1 @repos2。)
(2)添加改动,并提交,以及与同步服务器
$git add conf/gitolite.conf
$git commit –q –m “new team @team1 auth forrepo testing.”
$git push
4. 在服务器创建版本库
(1)通过管理员创建版本库,只需要在conf/gitolite.conf中添加一个规则即可,等同步到服务器后会自动创建:
repo project
C = @all
RW+ = @all
(2)上传现有的版本库,首先在本地创建一个版本库project
$mkdir project && cd project
$git init
$touch README // 此处一定要创建文件,不然会出现error:
(error: src refspec master does not match any.
error: failed to push some refs to'ssh://xxxxx.com/project.git')
$git add README
$git commit –m “Initial repo.”
$git remote add origin gituser:/project.git //此处一定要保证(1)完成,并有C(创建权限)
$git push origin master
完成现在版本库的上传
(3)使用通配符,用户可以创建自已的版本库,即用户自己的版本库空间,使用通配符需要开启该功能位,$GL_WILDREPOS默认为0(不开启),在用户的主目录下的配置文件 .gitolite.rc 中将该功能位设置为1:$GL_WILDREPOS = 1.
编辑conf/gitolite.conf,添加:
repo users/CREATOR/[a-zA-Z].*
C = @all
RW+ = @all
其中CREATOR为创建者的用户名,算是一种宏定义。在git用户的电脑上,进行第(2)步操作,唯一不同地方的是:
$git remote add origin gituser:/users/gituser/project.git
本篇只介绍了基本的管理操作,诸如用户分支的权限控制、及各种权限标识符表示的意义没有涉及,可以自行查阅相关资料。
辉辉
(FightingBull Studio)