转载请注明原始出处:http://blog.csdn.net/a464057216/article/details/52644021
后续此博客不再更新,欢迎大家搜索关注微信公众号“测开之美”,测试开发工程师技术修炼小站,持续学习持续进步。
requirements
- Mac OS version:Mac OS X El Capitan以及一个有更改系统的root权限的用户
- Openssh
- Git 1.6.6+
- Perl 5.8.8+
注:虽然这篇博客是在Mac上安装的gitolite,但是在其他*nix系统上的操作是类似的。
创建新用户git
“系统偏好设置” -> “用户与群组” -> “点按按钮以进行更改”,点击“+”添加一个普通成员git。
将git用户添加到系统的sudoers中,再用另一个用户(如mars)创建一对SSH公钥/私钥,将公钥拷贝到/Users/git目录,为方便将其重命名为mars.pub,文件所属用户改为属于git。
使用git用户安装gitolite
git用户是gitolite的托管用户,负责git仓库的代码库管理。首先mkdir -p ~/bin
创建目录,再将export PATH=/Users/git/bin:$PATH
加在~/.bash_profile
中,更新PATH后点击“系统偏好设置” -> “共享”,打开“远程登录”,然后执行:
git clone git://github.com/sitaramc/gitolite
gitolite/install -ln /Users/git/bin #需要使用绝对路径
gitolite setup -pk mars.pub #设置管理员用户公钥
管理gitolite
通过mars用户可以管理gitolite,方法是通过更改gitolite-admin.git
这个特殊的仓库,首先在mars用户的~/.ssh/config
中添加如下配置(管理用户与托管用户在同一个机器时的情形):
Host local
HostName 127.0.0.1
IdentityFile ~/.ssh/id_rsa
然后git clone这个仓库:
项目目录结构为:
gitolite-admin
├── conf
│ └── gitolite.conf
└── keydir
└── mars.pub
2 directories, 2 files
其中keydir
目录存储服务器端可以接受的SSH公钥,gitolite.conf
文件存储每个仓库的鉴权信息。管理gitolite都是通过更改这个特殊的仓库然后push到git服务器完成的,千万不能自己用git用户操作仓库目录。
管理用户
添加用户
将用户的公钥文件拷贝到keydir
目录中,然后git add keydir
->git commit -m "add user xxx"
->git push
。在git用户的~/.ssh/authorized_keys
中可以看到新添加的用户,这个用户可以访问gitolite的testing代码库(这个代码库是所有人都可以访问的)。
###删除用户
在keydir
目录下git rm xxx.pub
->git commit -m "remove user xxx"
->git push
。在git用户的~/.ssh/authorized_keys
中可以看到该用户已经被删除。
管理仓库
创建仓库
在conf/gitolite.conf
中追加如下内容:
repo mars
RW+ = xxx
上面的配置表示为用户xxx
创建名为mars
的repo,且xxx
有对这个repo任意的操作权限(RW+)。将改动git push到git服务器,就会在/Users/git/repositories
目录创建名为mars.git
的项目。如果xxx用户的公钥在/Users/git/.ssh/authorized_keys
的列表中,即可任意操作这个git repo。
仓库的repo配置这行,要求所有的仓库名字都在一行,如下格式的配置是无效的:
repo mars1 #这一行会被忽略
repo mars2 mars3 #创建名字为mars2、mars3的repo成功
RW+ = xxx
如果repo的列表太多在一行中写不开,可以使用仓库组的语法:
@myrepos = mars1
@myrepos = mars2
...
@myrepos = marsn
repo @myrepos
RW+ = xxx
删除仓库
删除仓库需要在/conf/gitolite.conf
中删除repo的配置,然后以在git服务器上以托管用户的身份手工删除相应的仓库(gitolite没有将这一过程自动化)。
重命名仓库需要按照以下顺序操作(顺序不可更改):
- 在git服务器上以托管用户的身份重命名对应仓库的名字(保留
.git
的后缀)。 - 使用管理用户修改
/conf/gitolite.conf
中对应仓库的名字后,git push修改到git服务器。
用户操作
ssh git@<server_host> info
命令查询git用户在git服务器上可以操作的repo列表、操作每个repo的权限、gitolite的服务器版本等。gitolite的性能卓越,根据gitolite作者的测试,gitolite管理11,100个仓库时,用户的git的操作平均响应时间为0.2s,唯独ssh git@host info
命令耗时较长。
gitolite不允许git用户对git服务器的ssh登录,并且也没有为每个git用户在git服务器上创建userid。
结束语
- gitolite是一个强大的git服务器管理工具,其对git仓库管理的授权控制可以做到非常精细(比如针对分支、代码目录访问权限的控制、对tag的权限控制),这些都需要通过编辑
/conf/gitolite.conf
来完成,具体可以参考官方文档。 - 在使用gitolite中如果遇到问题,可以查看其log:
/Users/git/.gitolite/logs
。 - 如果仓库的数量大于2000个时,推荐使用gitolite 3.2+版本。
- gitolite并不像GitLab那样有好用的图形界面,我一般也不会使用原生的方法去操作gitolite-admin这个仓库,使用python操作gitolite可以使用pyolite。
如果觉得我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!