Fedora 20 安装gitolite
“git本地化之后,可能会用到权限管理,gitolite就是一个强大的权限管理工具”
gitolite安装先决条件
关于git和ssh登录的基础知识,网上已经有很多很好的文章,在这里就不再加以赘述了。
安装git
要安装gitolite,首先要安装git:
| 1 | sudo yum install git | 
创建git用户组和git用户
然后,需要新建用户和用户组git,以方便所有用户使用git账户进行登录:
| 1 | # 添加git用户组 | 
创建管理员密钥
由于初始化gitolite需要一个管理员的公钥,所以需要创建一个key:
| 1 | # 为名为“yourname”的账户生成相应的key | 
将公钥上传到git用户中
生成key之后,需要将其上传到git用户之中:
| 1 | # 将公钥上传到git用户中 | 
若此时出现错误:
| 1 | ssh: connect to host 127.0.0.1 port 22: Connection refused | 
则说明ssh服务没有打开,需要开启ssh服务:
| 1 | # 开启ssh服务 | 
除此之外,要让局域网内的用户能够访问git服务器,需要关闭防火墙:
| 1 | sudo systemctl stop firewalld.service | 
安装gitolite
进入git用户并创建bin目录
安装gitolite的操作需要在git用户下进行,首先需要切换到git用户:
| 1 | su git | 
输入密码后,需要切换到git用户的用户根目录下创建bin文件夹:
| 1 | cd ~ | 
克隆gitolite并安装
我们需要从github中克隆gitolite的官方仓库进行安装:
| 1 | # 克隆gitolite仓库 | 
安装gitolite的时候,可能会出现错误:
| 1 | Can't locate Data/Dumper.pm in @INC | 
这是由于没有安装相应的perl包所导致的,需要切换回非git用户进行安装,使用命令:
| 1 | # 使用CPAN安装perl包 | 
如果是首次使用CPAN会进行一定的配置,在询问是否自动配置处输入yes即可。
使用CPAN时可能出现错误:
| 1 | Can't locate CPAN.pm in @INC | 
这是由于没有安装CPAN出现的错误,使用命令:
| 1 | sudo yum install perl-CPAN | 
安装完成后,应该会自动集成Data::Dumper包。
回到git用户,安装gitolite后,bin文件夹中会出现相应的文件,到此,gitolite就安装成功了。
使用公钥初始化gitolite
完成安装gitolite后,需要使用刚才上传的公钥将gitolite进行初始化,这个公钥的所有者将成为gitolite的第一个管理员, 在git用户根目录下,使用命令:
| 1 | # 使用yourname.pub对gitolite进行初始化 | 
到此为止,gitolite的初始化已经完成。
添加gitolite的用户和仓库
不要手动在git服务器中添加新用户或者新仓库。因为gitolite的用户,仓库和权限规则都是使用一个名为gitolite-admin的特殊仓库进行维护的,想要进行修改,就需要通过修改该仓库的文件并push到服务器当中。
要添加用户和仓库,首先需要退出git用户后,将gitolite-admin克隆到本地:
| 1 | # 退出git用户 | 
进入gtiolite目录后,可以看到两个子目录conf和keydir,conf/gitolite.conf用于修改仓库,用户及其权限,keydir用于存放用户的公钥。
为了增加新用户alice,bob和carol, 首先需要获取他们的公钥(alice.pub,bob.pub和carol.pub),并添加到keydir文件夹当中。
为了增加新仓库foo,并赋予这些用户不同的权限,修改conf/gitolite.conf文件:
| 1 | repo foo | 
进行修改之后,需要将改动上传到服务器使其生效:
| 1 | git add conf | 
当git的push操作成功后,gitolite将会把新用户添加到服务器的~/.ssh/authorized_keys文件中,然后会新建一个名为foo的空仓库。
进阶操作
权限管理
gitolite的权限管理非常强大,之前展示的只是最简单的权限管理,下面是更加深入一些的管理:
| 1 | repo foo | 
下面对上述规则进行阐述:
- alice能够对仓库进行所有的操作。
- bob能够创建和推送任何名字不为- master的分支,并能够添加任何不以- v+数字开头的- tag。
- carol能够添加任何以- v+数字开头的- tag。
- dave能够进行- clone和- fetch操作。
更加详细的权限管理请看官方文档。
组
gitolite允许创建用户组:
| 1 | @staff = alice bob carol | 
用户组是可以堆叠的,下面的写法和上方的@staff是相同的:
| 1 | @staff = alice bob | 
同样的,也可以将用户组添加到另一个用户组当中:
| 1 | @all-devs = @staff @interns | 
此外,gitolite有一个特殊的用户组,名为@all,他表示所有的用户。