45.在Mac上使用gitolite搭建Git服务器

转载请注明原始出处: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的博客)或者为这篇文章点赞,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值