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的连接串不能删除,有人用过这个是肯定是有一种愤怒的感觉。