gitolite用于git版本库的权限控制。
gitolite发端自gitosis,功能早已超越后者,而且gitosis已停止跟新好多年!
安装
使用单独的用户git来安装gitolite
创建用户
1
| # adduser --shell=/bin/bash git |
安装gitolite
先为自己生成一个密钥对
先为自己生成一个密钥对
1
| $ ssh -keygen -b 2048 -t rsa -f your_name |
然后
对于ubuntu可以通过apt-get install gitolite3安装
1
2
3
4
| $ git clone git: //github .com /sitaramc/gitolite $ mkdir -p $HOME /bin $ $HOME /gitolite/install -to $HOME /bin $ $HOME /bin/gitolite setup -pk your_name.pub |
安装就算完成了。
安装之后gitlote会在$HOME/repositories目录下初始化两个git仓库,gitolite-admin.git和testing.git,前者用于管理gitlote,后者是个测试用的仓库。
安装之后gitlote会在$HOME/repositories目录下初始化两个git仓库,gitolite-admin.git和testing.git,前者用于管理gitlote,后者是个测试用的仓库。
配置
gitolite通过更新gitolite-admin.git仓库来实施管理。所以要先clone这个仓库:
gitolite通过更新gitolite-admin.git仓库来实施管理。所以要先clone这个仓库:
1
| $ git clone ywang@:gitolite-admin |
这里ywang@ubuntu是主机名。
用户管理
将git用户的公钥拷贝到进入管理仓库下的子目录keydir,然后提交推送即可。用户的公钥以username.pub的格式命名,username与权限管理时指定的用户名必须是一致的。
权限管理
权限管理就是配置管理仓库子目录conf下的gitolite.conf文件。配置完毕提交推送权限就会生效。
先列出一个简单的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| @admin = openwares @staff = minli.wang @admin repo gitolite-admin RW+ = @admin repo testing RW+ = @all repo foobar RW+ = @admin - master = @staff - refs /tags = @staff RW devel = @staff RW+ = @staff |
gitolite支持按用户或组管理权限。组名以@开头,可以包含多个用户,名字以空格分隔。组还可以嵌套其他组。
权限规则行的格式为:
权限规则行的格式为:
1
|
|
refex的含义见下一节
权限分类和规则
- C
- R
- RW
- RW+
- -
可以创建新仓库
可以读取仓库
可以读取,fast-forward推送,创建分支和标签
可以进行任何类型的push,包括delete,rewind,overwrite等
拒绝任何类型的推送
对于clone和fetch操作,只要当前用户具有R,RW或RW+任何一种权限,都可以读取仓库,其实就是存在R权限。
对于push操作,gitolite顺序处理权限规则,直到找到一条用户,权限许可和分支模式完全匹配的规则为止,之后的规则不再处理,所以一定要注意权限规则的顺序问题。
对于push操作,gitolite顺序处理权限规则,直到找到一条用户,权限许可和分支模式完全匹配的规则为止,之后的规则不再处理,所以一定要注意权限规则的顺序问题。
refex
refex这玩意儿就类似于regex的叫法,是指ref的匹配模式。有以下匹配规则:
refex这玩意儿就类似于regex的叫法,是指ref的匹配模式。有以下匹配规则:
- 空的refex处理为’refs/.*’,也就是匹配任何refs,因为ref默认都存在于refs/目录下
- 如果指定的refex没有以refs/开头,则为其添加前缀refs/heads/
- refex使用隐式的行首规则,^在规则表达式中为匹配行首,refex默认从行首匹配,但没有$行尾匹配。举个栗子,如果指定refex为master,则下面这几个ref都可以匹配:123
refs
/heads/master
refs
/heads/master1
refs
/heads/master/full
- 最后实际被推送到的ref以经过规则匹配后的结果为准
个人分支
gitolite支持为用户设立个人分支空间,其规则如下:
gitolite支持为用户设立个人分支空间,其规则如下:
1
| RW+ personal /USER/ = alice |
personal可以为任何字符,/USER/会被替换成实际的用户名,因此用户alice可以在personal/alice/目录推送任何分支,比如
personal/alice/foo和personal/alice/bar,但不能推送到personal/alice。
personal/alice/foo和personal/alice/bar,但不能推送到personal/alice。
个人分支空间为每个用户设立一个私人空间,防止公共分支空间的名字污染。开发者可以随意使用自己的个人分支空间,无需关心其权限问题,也不用担心分支名字冲突。
gitolite shell
gitolite提供了一个简单的ssh shell,可以了解远程仓库的一些信息和进行一些管理操作,以下命令可以查看shell的帮助:
1
| $ ssh gitolite help |
gitolite是远程gitolite的ssh别名。可以在每个支持的命令后面添加-h参数来了解命令的详细用法。比如:
1
| $ ssh gitolite help -h |
新建gitolite远程仓库
有这么几种方法:
有这么几种方法:
- 服务器管理员远程登录服务器,直接在$HOME/repositories目录下初始化裸仓库,这和使用git没有任何差别
- 修改gitolite-admin/conf/gitolite.conf文件,添加新仓库及其权限,提交推送时,gitolite会自动创建新仓库
- 具有创建仓库权限的用户,可以本地创建空仓库,然后添加远程仓库引用,推送后gitolite会为用户创建新仓库。比如:123456
mkdir
somegit
cd
somegit
git init
git commit --allow-empty
git remote add origin git@server:Projects
/somegit
.git
git push origin master
删除gitolite仓库
先删除配置文件中仓库的相关配置,然后登录服务器删除仓库,gitolite不会自动删除仓库。
先删除配置文件中仓库的相关配置,然后登录服务器删除仓库,gitolite不会自动删除仓库。
没有评论:
发表评论