What is gitolite
Gitolite是git的顶层的访问控制层。
下面是一些特性:
- 在服务器端,使用一个单独的unix用户。
- 提供多用户访问
- 他们不是真正的用户
- 它们不会获得shell权限
- 控制对多个git仓库的访问
- 真正的读访问被repo层控制
- 写访问在branch/tag/file/directory层控制,包括谁能够rewind,create以及delete branches/tags
- 能够不经过root允许进行安装,假设git和perl已经被安装了
- 访问认证通常采用sshd,但是也可以使用http
Setting up gitolite
设置gitolite
这是使用gitolite的第二步,在install之后。这个步骤也是发生在server端。
安装完软件之后就可以使用了,使用之前先要设置。
首先你需要有一个public key文件。
假设这个管理员叫做alice,这个公钥可能被命名为alice.pub。
然后主机用户运行
gitolite setup -pk alice.pub
如果这个命令被成功的执行了,那么就完成了设置。
如果有警告,那么可能你提供的这个公钥在服务器上具有获取终端的权限,它不会工作。
通常,gitolite运行在一个用户不能直接访问的主机上,你采用其他的一些用户名登录,然后使用su -git命令。
在此,没有密钥被用来获取shell访问,因此没有冲突。
另外的方法是使用两个不同的密钥,用别名来区分。
setup命令还有其他的用处,因此在安装完了之后你可能还会用到它
- 当你把一个已有的仓库移动到gitolite中时,更新钩子。或者修正钩子。
- 更改一个丢失的管理员密钥
- 设置gitolite为http模式
当有疑问的时候,运行gitolite setup,它不会造成什么损害,当然了如果你有上千个仓库的时候它会有些慢。
Cloning the admin repo
这是使用gitolite的第三步
克隆管理员repo,来到使用公钥设置的工作区,运行
git clone git@host:gitolite-admin
注意,不能包括repositories/部分
你可以在最后包含.git,但是这是可选的
如果这步成功了,那么你可以增加用户,repo仓库,或者其他的事情了。
如果这步失败了,去看看ssh的文档。
Gitolite administration
服务器端的管理
下面的命令要求用命令行访问服务器。
它们通常是一次性或者很少活动的。
- 更改rc文件的内容
- 安装客户的hooks,对所有的repos或者某一部分repos
- 移动已经存在的repos到gitolite
access control via the gitolite-admin repo
日常操作大致如下:
- 把gitolite-admin repo, clone下来到你的工作区
- 做出适当的更改
- add, commit, 以及 push
the conf/gitolite.conf文件
gitolite的大部分功能来自于conf/gitolite.conf文件。
这里面制定了对repos的访问控制细节。
任何关于增加用户的操作都来自于这个文件
下面是个例子
@staff = dilbert alice # line 1
@projects = foo bar # line 2
repo @projects baz #line3
RW+ = @staff #line 4
- master = ashok #line5
RW = ashok #line6
R = wally #line7
config hooks.emailprefix = ['%GL_REPO] ' #line8
从下面的链接学到更多
- 基础语法 -- 注释,空格,包含文件等
- 定义组, 1,2行
- 增加删除用户
- 增加删除repos 3行
- 定义访问规则 4,5,6,7行
- gitolite选项
- git config关键字和值 8行
- wile repos -- ad hoc, user-created, repos
Basic syntax
basic syntax
通常来说,所有的元素都是用空格隔开的;没有逗号,分号,以及其他的东西。
注释通常用shell的样式,#
用户名和repo名字一样,它们都以字母开始,但是可以用点,下划线,减号连接
用户名可以选择用@符号后面跟一个至少包含一个点号的域名
组名与用户名类似,以@开头
repo的名字里可以包含/符号
默认没有续行的功能,你不需要它们。
inlcude files
gitolite允许你将配置文件分为多个
使用下面的语法来包含进来
include "foo.conf"
可以使用通配符include *.conf
或者使用子目录foo/bar.conf repos/*.conf