gitolite的README译文
本篇博文只会讲解gitolite的基础内容,主要包括了gitolite的安装方法、权限设置方法和基本的使用方法。
如果你希望学习到完整的教程,可以移步这里。
先说说我们大概会讲到哪些内容,以及讲解顺序:
01 - 安装和设置 02 - 增加用户和代码仓库 03 - 为你的用户提供支持 04 - 配置文件基本语法 05 - 访问规则 06 - 组概念 07 - 命令介绍 08 - rc文件介绍 09 - GIT-CONFIG 10 - GIT-DAEMON 11 - GITWEB
=================
[01] - 安装和设置
想安装gitolite,在软件方面有一些小小的前提条件:
1 UNIX/LINUX操作系统 2 shell环境 3 git 1.6.6+ 4 perl 5.8.8+ 5 openssh 5.0+ 6 专为gitolite使用的账号(本文会设置为git)
在正是开始安装gitolite之前,我们先做一些交代:
1 gitolite可以分为server/client,server是搭建在服务器上,存储着代码库和所有用户的各类管理信息。client则是指所有使用gitolite服务的用户们,用户们会在自己的电脑(windows/linux/mac/android/ios等等)上通过git/ssh等命令与gitolite服务进行交互,包括下载代码、上传代码、管理用户等等。
2 我们将server所在机器成为服务器端机器(域名设定为server-host),将client所在机器成为客户端机器(域名设定为client-host)
3 gitolite的用户中,有一部分(极少数的几位)扮演着gitolite管理者的角色,他们具有管理用户授权的权利。
4 gitolite可以并行管理非常多的开发项目,每一个项目会对应一个独立的git repository,我们把之为代码仓库,即每一个项目会对应一个代码仓库。
好了,闲言少叙,我们现在就开始gitolite的安装咯,其实步骤非常简答,甚至比经典的“5分钟搭建wordpress”还要简单:
1 以git账号登入server所在服务器(服务器端机器) 2 确保~/.ssh/authorized_keys为空或不存在 3 选择你自己的一台机器作为client机器(客户端机器,建议区别于服务器端机器),并将这台客户端机器的公钥上传并保存在服务器端机器的/home/git/YourName.pub位置(本博文中使用rocmac.pub。如果是在windows平台,可以安装puttygen工具来生成公钥)。 4 在服务器端执行如下命令,下载gitolite主程序: cd /home/git git clone git://github.com/sitaramc/gitolite mkdir -p /home/git/bin gitolite/install -to /home/git/bin(在bin文件夹中会多出不少文件) gitolite setup -pk rocmac.pub
在安装过程中,如果遇到如下提示:
$ ./gitolite/install -to /home/git/bin Can't locate Time/HiRes.pm in @INC (@INC contains: /home/git/gitolite/src/lib /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at /home/git/gitolite/src/lib/Gitolite/Common.pm line 76. BEGIN failed--compilation aborted at /home/git/gitolite/src/lib/Gitolite/Common.pm line 76. Compilation failed in require at ./gitolite/install line 15. BEGIN failed--compilation aborted at ./gitolite/install line 15.
那么解决方法也很简单(以fedora 15举例):
yum install perl-Time-HiRes.i686
[02] - 增加用户和代码仓库
不建议直接在服务器端机器上手动添加新的代码仓库和新用户,因为这些操作完全可以由管理员在客户端机器上远程操控完成。
为此,Gitolite提供了一个特殊的代码仓库,名叫gitolite-admin(你可以在服务器端机器的/home/git/repositories/中找到)。
用户元信息、代码仓库元信息以及授权元信息,都是存储在gitolite-admin代码仓库中的,管理员在客户端机器修改后通过push命令更新到server上来,以达到用户管理和代码仓库管理的目的。
所以,我们现在要到自己的客户端机器(client-host)上,执行如下命令,以获取到服务器端的gitolite-admin这一特殊的代码仓库(我们称之为管理仓库):
git clone git@server-host:gitolite-admin #如果你的服务器端sshd的服务端口是12345,那么就是用如下命令: git clone ssh://git@server-host:12345/gitolite-admin
这样的话,你就已经把服务器端的gitolite-admin管理仓库克隆到客户端机器本地了,你可以直接cd到gitolite-admin文件夹,映入眼帘的应该是conf和keydir两个子文件夹。
keydir文件夹就是管理用户公钥的地方,如果有一位新用户(tom)希望申请账户并申请一个新的代码仓库(代码仓库叫做tomtest),那么让他提供他的账号、他用的电脑的公钥给你(可以通过email/IM等各种途径都无所谓),然后由你(你具有管理权限)在keydir下创建tom.pub问价并将tom的公钥复制其中。
现在要为tom设置新的代码仓库了,做法是打开conf/gitolite.conf文件,加入如下的内容:
repo tomtest RW+ = tom
然后保存退出。
最后,就是将刚才在客户端更改的内容上传到服务器端了:
git add conf git add keydir git commit -m "add tom user. add tomtest repo, and set access rules." git push
push生效后,gitolite就会在服务器端的/home/git/.ssh/authorized_key下创建新用户tom相应的内容,并且还会创建一个全新的空的代码仓库tomtest。
[03] - 为你的用户提供支持
当用户申请账号和权限的流程完成后,你需要把用户访问代码仓库的URL链接发给他,一般URL为git clone git@host:reponame形式。
继续拿tom举例,如果tom想查询他到底可以访问哪些代码仓库,可以让tom在自己的客户端机器上执行如下命令:
ssh git@server-host info #如果server-host的sshd服务端口是12345的话 ssh git@server-host -p 12345 info
[04] - 配置文件基本语法
对于gitolite.conf配置文件来讲,它的配置语法格式非常简单,基本可以概括为如下几条:
1 任何需要间隔的地方均可以使用空格符,在任何地方都不允许使用逗号或分号。 2 注释符号使用方法和perl/shell一致 3 用户名或代码仓库名称应尽量的简单,可以以字母或数字开头,后面还可以接“.”、“-”、“_”等。 4 用户名中也可以使用@符号,这是为了便于我们使用邮箱地址来作为用户名。 5 代码仓库名称中可以使用/符号,这是为了多层结构的代码仓库。
[05] - 访问规则
gitolite对于代码仓库和用户的权限控制功能很灵活,大家要仔细阅读下面的内容。
访问规则的最简单的语法是这样的:
repo 仓库名称位 权限位 匹配规则位 = 用户(组)位
如果权限位设置了R权限,则相应的用户对所设置的代码仓库具有读权限,例如fetch和clone动作都是需要读权限的。
而对于push动作,代表了写权限,而写权限的设置会稍显复杂些,大致可分两大类来讲解:
第一类为权限相关:
1 如果权限位设置为RW,那么所设置的用户在代码库fast-forward情况下允许进行push操作,否则禁止push;(如果你不了解fast-forward,则需要先了解下git相关知识)
2 如果权限设置为RW+,那么允许任何形式的push,包括在非fast-forward状态下的强制更新。
3 如果权限设置为-,则会禁止相应的push。但是-并不会影响用户的读权限。
4 如果未设置有关push的规则,则默认禁止push
第二类为正则匹配:
1 如果未设置正则匹配,则默认为refs/.*
2 如果设置的正则匹配没有以refs/开头,则默认会自动加上refs/head/
3 默认情况下,会在正则匹配前面自动加上^
如下是一个稍显复杂的规则设置:
repo roctest RW+ = alice - master = bob - refs/tags/v[0-9] = bob RW = bob RW refs/tags/v[0-9] = carol R = dave
我们来具体解读这个例子:
1 alice可以对任何分支、任何tag做任何事情,包括create/delete/push/overwrite等 2 bob可以进行fast-forward-push,但是却不能对以master开头的分支进行push 3 bob可以创建tag,但是却不能创建以v+数字命名的tag 4 carol则只可以创建以v+数字命名的tag 5 dave则只允许clone和fetch。
[06] - 组概念
gitolite允许我们对用户或代码仓库进行分组,以便于管理。
对于用户组,我们可以把组认为是角色的概念。
如下是一些例子:(代码仓库组与用户组的设置方法完全相同)
@staff = alice bob carol @interns = ashok repo secret RW = @staff repo foss RW+ = @staff RW = @interns
对于组的定义采用追加规则,即如下两行的效果和上例中对@staff的定义效果完全相同(但对于权限相斥的情况,一般会以禁止为先):
@staff = alice bob @staff = carol
另外,组也可以嵌套定义:
@all-devs = @staff @interns
最后再补充一点:
@all是一个特殊的组,当你需要指定所有的用户、所有的代码仓库时可以使用此组。
[07] - 命令介绍
用户可以在自己的客户端机器上执行如下命令,获得可用命令列表:
$ ssh git@server-host help hello rocmac, this is gitolite3 v3.2-13-gf89408a on git 1.7.1 list of remote commands available: desc help info perms writable
其中最常用的便于info命令。
如果你有在服务器端执行shell命令的权限那么你可以执行更多的gitolite命令:
$ gitolite help hello, this is gitolite3 v3.2-13-gf89408a on git 1.7.1 list of gitolite commands available: D access create creator desc fork git-config help htpasswd info list-dangling-repos lock mirror perms print-default-rc push rsync sshkeys-lint sskm sudo svnserve symbolic-ref who-pushed writable
[08] - rc文件介绍
我们所说的rc文件是指~/.gitolite.rc。这个文件是一个perl语法的文件,但是你无需学习perl也可以配置它。这个文件是在安装gitolite时产生的。
[09] - GIT-CONFIG
gitolite允许用户们在不必登陆服务器的情况下就可以设置git config的相应配置,而且是对不同的代码仓库可以设置不同的配置项。(这需要在.gitolite.rc中开启此功能,否则默认是禁止的)
repo foo config hooks.mailinglist = foo-comits@example.tld config hooks.emailprefix = '[foo] '
[10] - GIT-DAEMON
如果希望gitolite为某个代码仓库创建git-daemon-export-ok标记文件,以便让git-daemon读取,则方法如下(如果用户被设置为@all,则默认便会有git-daemon-export-ok标记文件的):
repo foo R = daemon
[11] - GITWEB
如果需要通过web来浏览代码仓库信息,请将代码仓库名称加入到服务器端的projects.list文件中。同时,设置:
repo foo R = gitweb
另外,如果你希望gitweb能从gitoloite中获取更详细的代码仓库信息,则你还可以专门设置一些信息,以便gitweb自动读取:
repo foo config gitweb.owner = some person's name config gitweb.description = some description config gitweb.category = some category
谢谢!
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:rocrocket 来源: linux大棚-roclinux.cn
- 标签: gitolite
- 发布时间:2012-12-17 13:32:00
- [71] Twitter/微博客的学习摘要
- [65] find命令的一点注意事项
- [64] 如何拿下简短的域名
- [64] IOS安全–浅谈关于IOS加固的几种方法
- [63] android 开发入门
- [62] Go Reflect 性能
- [62] 流程管理与用户研究
- [60] Oracle MTS模式下 进程地址与会话信
- [59] 图书馆的世界纪录
- [58] 读书笔记-壹百度:百度十年千倍的29条法则