Gitolite入门

译自:https://github.com/sitaramc/gitolite

Gitolite文档

===============================

本文包括Gitolite的安装及一些常用功能的使用方法. 如果您需要更详细的介绍, 或在解决某个问题, 异或只是想看看那些这里没有提及的功能的话, 请阅读Gitolite的在线文档: http://sitaramc.github.com/gitolite/master-toc.html

 

本文包括以下几个章节:

  1. 安装和部署
  2. 添加新用户或代码库
  3. 帮助您的用户
  4. 基础语法
  5. 权限控制
  6. 组定义及使用
  7. 命令
  8. 'rc'文件
  9. GIT配置
  10. 与GIT-DAEMON整合
  11. 与GITWEB整合

--------------------------------------------------------------------

安装和部署

---------------------

服务器环境

  • 任意UNIX操作系统
  • SH
  • git 1.6.6+
  • perl 5.8.8+
  • openssh 5.0+
  • 一个独立的用户(本文中假定该用户名为git), 仅在shell中被其他用户的'su git'命令使用

安装步骤

  1. 登录系统, 打开shell, 并切换到git(即前面提到的独立用户, 译者注)用户
  2. 确保~/.ssh/authorized_keys文件不存在或为空文件. (gitolite使用此文件保存公钥文件)
  3. 确保您的公钥文件已经准备好, 如: ~/YourName.pub (创建公钥文件的方法: ssh-keygen -t rsa -f ~/.ssh/YourName, 其中YourName为一个对您来说有意义的名字, 译者注)
  4. 执行以下命令:
    git clone git://github.com/sitaramc/gitolite
    mkdir -p $HOME/bin
    gitolite/install -to $HOME/bin
    gitolite setup -pk YourName.pub

    如果最后一行命令出错的话, 可能是因为'bin'目录不在你的PATH中, 您可以选择将bin加入或直接执行:
    $HOME/bin/gitolite setup -pk YourName.pub

添加新用户或代码库

不要在服务器上直接手动添加新用户或创建代码库。 Gitolite通过修改一个名为“gitolite-admin"的特殊代码库来完成新用户、代码库的创建及访问控制规则的设置。

------

要想管理您的代码库,请先在本地做如下操作(如果您还没有这样做的话)
git clone git@host :gitolite-admin

注意:
如果服务器提示您输入密码,那么请查检前面所说的准备工作是否已经做了。

命令成功后,您可以看到在gitolite-admin目录下有两个子文件夹:conf和keydir。
要添加新用户alice, bob and carol, 向他们索取公钥并将这些公钥复制到keydir中,如:alice.pub, bob.pub, carol.pub
要添加新代码库,并设置访问控制的话,编辑conf/gitolite.conf文件,在文件尾追加如下代码:
repo foo
            RW+         =   alice
            RW          =   bob
            R           =   carol

对于访问控制的具体介绍,请参照”访问控制“章节。
当你完成这些操作之后,执行如下命令使之生效:
git add conf
git add keydir
git commit -m 'added foo, gave access to alice, bob, carol'
git push

当push完成后,gitolite会自动创建三个新用户,并将他们的公钥文件添加到~/.ssh/authorized_keys文件中, 同时创建一个新的名为‘foo’的空代码库。

帮助您的用户

当某个用户把他的公钥文件发送给您时,您需要像上一章节提及的那样将公钥添加到服务器并添加新的用户,并且还需要告诉他代码库的访问地址。通常的格式是”git clone git@host :reponame", 对于其他的形式,请参照git-clone的帮助。
注:
当clone代码库时,如果服务器提示输入密码的话,请查检用户是否添加正确。
用户可以通过执行“ssh git@host info"命令来查看他们能访问的代码库列表,更多的命令介绍请参照本文的”命令“章节

基础语法

  • 配置文件的语法非常简单:
  • 所有的语句都使用空格分隔,没有任何的逗号、分号等
  • 使用perl/shell格式的注释
  • 代码库的名称必须以字母开头,在字母后可以包含".", "_"或"-",越简单越好。名字中允许包含‘/’,这样在创建代码库时会以目录层级结构进行存储,方便管理
    用户名可以是邮件格式,或者不包括‘@’之后的部分
  • 没有换行连接符

访问控制

本章节将以一个较为复杂的授权示例来说明。
Gitolite的访问控制非常强大,前面展示的都是一些简单的用法,这里咱们来看一个稍复杂一些的例子:
repo foo
            RW+                     =   alice
            -   master              =   bob
            -   refs/tags/v[0-9]    =   bob
            RW                      =   bob
            RW  refs/tags/v[0-9]    =   carol
            R                       =   dave

对于像“clone"和”fetch"这样的读操作, 只要用户的规则中有一条以上读权限(R, RW, RW+),就允许该用户对指定代码库的读操作。
对于“push"操作,控制规则是按顺序查找的,直到找到权限(注1)和refex(注2)都对应的,如果此时权限符号是“-”,禁止push操作,否则允许push操作。如果找不到符合的规则,禁止操作。

注1:权限对应
  • RW对应fast-forward类型的push或创建
  • RW+对应所有类型的push
  • -不对应任何类型的push
注2:refex对应
(refex = 正则表达式描述的分支与正在push的匹配)
  • 空的refex被翻译为 'refs/.*'
  • 不以'refs/'开头的refex会被自动在前面添加‘refs/heads/'
  • 最后, ’^'字符表示以此refex开头的所有
  • the ref being pushed is matched against this resulting refex
示例代码中的规则是这样的:
  • alice对所有的分支和标签拥有所有的权限:创建、push、删除、重置/覆盖等
  • bob对所有不以'master'开头的分支有创建和fast-forward push的权限,并且能创建所有不以V+数字开关的标签名称的标签 
  • carol能创建以V+数字开头的标签
  • dave只能clone和fetch(只读)

组定义及使用

Gitolite支持将用户或代码库分组以方便管理,如:
@staff       =   alice bob carol
    @interns    =   ashok

        repo secret
            RW      =   @staff 

        repo foss
            RW+     =   @staff 
            RW      =   @interns

组的定义是累加的,下面两行组定义的结果与上面的第一行相同:
@staff       =   alice bob
    @staff       =   carol

组定义还支持嵌套
@all-devs   =   @staff  @interns

最后, @all是内置的一个特殊分组,代表所有用户或所有代码库

命令

用户可以在远程使用ssh执行一些命令, 如:
ssh git@host  info

此命令用于显示所有可以访问的代码库。
help命令用于显示所有可用的命令,所有命令都可以用‘-h'参数查看命令说明。
如果你在server端,可用命令更多,试试’gitolite help'

'rc‘文件

Some of the instructions below may require you to edit the rc file (~/.gitolite.rc on the server). The rc file is perl code, but you do NOT need to know perl to edit it. Just mind the commas, use single quotes unless you know what you're doing, and make sure the brackets and braces stay matched up.

Git配置

Gitolite允许您不登录远程服务器也可以为每一个代码库设置不同的git-config的值。
repo foo
            config hooks.mailinglist = foo-commits@example.tld
            config hooks.emailprefix = '[foo] '
            config foo.bar = ''
            config foo.baz =

警告:
最后一行是唯一一个删除配置的办法,直接从配置文件中删除相应行并不能从代码库的.git/config文件中删除

安全提示:
有一些git-config的值允许在服务器上执行脚本,如果您所有的代码库管理员都有访问系统的账号的话,您可以将rc文件(~/.gitolite.rc)中的GIT_CONFIG_KEYS改为:
GIT_CONFIG_KEYS     =>  '.*'

否则,用一个空格分隔的一系列正则表达式来指定哪些key可以被Gitolite进行远程更改。如:下面的配置规定只能修改那些以“gitweb"或”gc"开头的keys:
GIT_CONFIG_KEYS     =>  'gitweb\..* gc\..*'

与GIT-DAEMON集成

Gitolite为每一个’daemon'用户有读权限的用户创建‘git-daemon-export-ok'文件,这样就可以通过git-daemon方式fetch, 如:
repo foo
            R   =   daemon

与GITWEB集成

每一个“gitweb"用户有读权限的代码库都将被加入到projects.list文件
repo foo
            R   =   gitweb

或者通过如下的命令来完成:
repo foo
            config gitweb.owner         =   some person's name
            config gitweb.description   =   some description
            config gitweb.category      =   some category

注意:
需要修改文件的权限为0027(默认是0077),并且gitweb要运行在git组下,对于那些已经创建的文件和文件夹,还需要执行一下’chmod -R'

转载于:https://my.oschina.net/hotleave/blog/73206

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值