1,简化管理员的客户端连接。

首先增加ssh的本地配置文件,在用户主目录下执行:

$ cat .ssh/config

添加:

host    hzjfrepo
        user git
        hostname 192.168.0.1
        port 22
        IdentityFile ~/.ssh/minstrel

然后克隆管理员仓库:

$ git clone hzjfrepo:gitolite-admin.git

如果没有配置上面的ssh配置文件,可以使用git clone git@192.168.0.1:gitolite-admin

2,增加新用户

进入gitolite-admin目录,发现keydir下只有一个minstrel.pub公钥。下面添加一个windows开发环境的用户zhangsan

我使用的而是securecrt,在这个程序的工具菜单下生成一组公钥和私钥zhangsan和zhangsan.pub,然后把zhangsan.pub上传到/home/minstrel/gitolite-admin/keydir下

接下来就是git操作了

$ git add keydir
$ git status
$  git commit -m "加入开发人员张三"
$  git push

最后一步报错了,大致内容是使用了不兼容的oppssh的公钥,本来可以使用ssh-keygen来转换的,但我嫌再去查命令格式麻烦,就又用securecrt又生成了一遍兼容openssh的密钥对,然后上传了新公钥。

本来要想amend一下上次提交,谁知竟然让我处理冲突,算了,撤销一次本地提交

$ git reset --hard HEAD^

$ git rm keydir/zhangsan.pub

$ git commit -m "删除用户zhangsan,因为他使用的是非openssh个是的公钥"

再上传

$ git add keydir/zhangsan.pub
$ git commit -m "增加用户zhangsan,这次使用了openssh格式的公钥"
$ git push

其实这个地方我有一个地方不懂,如何让远程仓库也撤销一个提交

成员上传成功,但是提示张三没有对应的权限,这是正常的,我们确实没有嘛

3,做个初步的授权规划。

人员分成4组,管理员,开发者,测试人员和普通员工。好动手

$ vi conf/gitolite.conf

增加以下内容:

@admin  = minstrel
@dev    = zhangsan
@test   = lisi
@staff  = wangermazi
repo    gitolite-admin
        RW+     = @admin
repo hzjf/.+
        C       = @admin @dev
        RW      = @admin @dev
        R       = @staff @test
repo    testing
        RW+     = @admin @dev @test

因为权限的学习犯困,实在研究不下去,先随便搞搞,以后生产用到再研究

$ git add conf/gitolite.conf 
$ git commit -q -m "初步规划了组成员的权限"
$ git push

好,没有报错,但提示有几个用户没有公钥,正常

4,测试是否好用

先用minstrel看看能否建库

$ git push hzjfrepo:hzjf/test1.git master

切换到git用户主目录下,果然有repositories/hzjf/test1.git库存在。

最具挑战性的居然是我用zhangsan用户从netbeans连接gitolite管理的testing仓库,搜了很长时间也没发现有人有成功的连接方法,但是我还是不死心。

我试了好几十种连接串,最终居然有一个行了,串是:ssh://192.268.0.1/testing.git,用户名填git,私钥用上面securecrt生产的兼容openssh的zhangsan的私钥,其中给我造成最大困扰的是netbeans7.1rc2中git的连接串不能删除,有人用过这个是肯定是有一种愤怒的感觉。