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
,他表示所有的用户。