1. 在服务器上创建Git管理员帐号git
- $sudo adduser git
2. 在客户端创建管理员公匙(Unix/Linux)
- $ssh-keygen
然后一路回车,提示成功后生成2个文件
~/.ssh/id_rsa
~/.ssh/id_rsa.pub (公匙)
3. 在客户端将公匙上传到服务器上管理员的主目录(没装SSH就发邮件吧:),并重命名为git.pub
- $scp ~/.ssh/id_rsa.pub git@YOUR_SERVER:/home/git/git.pub
4. 在服务器上安装git-core
- $sudo apt-get install git-core
5. 在服务器上安装Gitolite,使用账户git打开shell,否则会找不到命令
- $git clone git://github.com/sitaramc/gitolite
- $cd gitolite
- $src/gl-system-install
- $gl-setup ~/git.pub
6. 客户端clone一个管理库,修改里面的文件,就可以管理仓库、用户、组、权限等等内容了
- $git clone git@YOUR_SERVER:gitolite-admin
关于Gitolite的权限管理,下面是一些入门知识
翻译了部分官方文档
http://sitaramc.github.com/gitolite/doc/gitolite.conf.html
syntax 语法
通常情况下,语法里都是以空格分隔的; 不使用逗号分号等符号.
注释跟Shell注释一样
用户名 和 仓库名 尽量简单; 必须以字母和数字开头, 后面可以包含.
, _
或 -
.
用户名可以跟字符@
并加域名,域名至少含有1个.
(也就是允许使用邮箱地址做用户名). 仓库名可以含有斜线/
(这可以很方便地将仓库组织成数状结构)
continuation lines 续行
没有续行 -- gitolite不处理C语言里反斜线\转译的任何特殊的新行. 但是"群组"章节会告诉你如何把一大串的名称定义成多行.
include files 文件包含
Gitolite允许把配置放在多个文件里,使用的时候很方便地包含到到主文件里.
include "foo.conf"
上面代码将把同目录下的foo.conf包含进主配置文件. 也可以使用绝对路径, 不过明智的话应该避免那样做!
也可以使用通配符,如:
include "*.conf"
这样会包含主配置所在目录下所有的".conf"文件.
处理过的文件都会略过,并报个警告.
basic access control 基本访问控制
下面是一组最基本的规则:
repo gitolite-admin
RW+ = sitaram
repo testing
RW+ = @all
repo gitolite simplicity
RW+ = sitaram dilbert
RW = alice ashok
R = wally
意思应该很容易猜到了:
R
表示读权限RW
表示读写权限, 不能rewindRW+
表示读写权限, 允许rewind
groups 群组
Gitolite允许你定义仓库groups,用户groups,甚至是refexes groups. group在语义上类似C语言里的#define
(但不是语法上). 下面是每种group的例子:
@oss_repos = gitolite linux git perl rakudo entrans vkc
@staff = sitaram some_dev another-dev
@important = master$ QA_done refs/tags/v[0-9]
group定义语法很简单:
@groupname = [one or more names]
group可以累积值,例如:
@staff = sitaram some_dev another-dev
@staff = au.thor
跟下面效果相同
@staff = sitaram some_dev another-dev au.thor
这比续行方便多了,可以在任何地方增加group. 很多人从数据库里生成gitolite.conf, 能做这种事情是非常有用的.
Groups可以包含别的groups, 被包含的group会展开他的当前值:
@staff = sitaram some_dev another-dev # line 1
@staff = au.thor # line 2
@interns = indy james # line 3
@alldevs = bob @interns @staff # line 4
"@alldevs" 展开了7个用户名. 然而要记住配置文件只顺序解析1次,所以后面给group增加的用户不影响前面的结果. 例如把第2行移动到最后, "@alldevs"就只有6个用户名了.
特殊的 @all
group
有个特殊群组叫@all
作为用户名使用时,包含了所有通过身份验证的用户; 前面你已经看到例子了.
作为仓库名使用时, 包含所有仓库.