Contents
  1. 1. 安装准备
  2. 2. 添加git用户
  3. 3. 安装gitolite
    1. 3.1. 克隆管理库到本地
    2. 3.2. 添加用户和仓库
  4. 4. 访问规则示例
  5. 5. 管理组
  6. 6. 常用命令
  7. 7. 参考资料

本文讲解在ubuntu上安装gitolite,为客户端提供git仓库服务器功能。ubuntu版本:server 16.04

安装准备

  1. 安装gitolite前,要安装 git,openssh-server和 openssh-client
    sudo apt-get update
    sudo apt-get -y install git openssh-server openssh-client

  2. 准备好你的ssh私钥和公钥
    没有的话可在本地执行ssh-keygen -t rsa -C "yourname@example.com 生成一个,生成后在~/.ssh/目录里,id_rsa是私钥,id_rsa.pub是公钥,文件生成后可以改名。

  3. 上传公钥
    将公钥上传到服务器备用,比如是/tmp/YourName.pub

添加git用户

sudo adduser --system --shell /bin/sh --group --disabled-password --home /home/git git

  • 使用命令添加加上–system参数,用户就不会在登陆界面显示
  • home是git用户主目录,也是git仓库的存储目录,如果仓库比较大可以放在别的盘中,比如我的就是/data/git

安装gitolite

  1. 登录到git用户
    sudo su - git
  2. 确保 ~/.ssh/authorized_keys 文件不存在或者为空
  3. 把公钥拷贝到git主目录下
    cp /tmp/YourName.pub $/Home/YourName.pub
  4. 下载并安装gitolite

    1
    2
    3
    git clone https://github.com/sitaramc/gitolite
    mkdir -p $HOME/bin
    gitolite/install -to $HOME/bin
  5. 初始化gitolite, 同时配置管理员
    gitolite setup -pk YourName.pub
    如果以上命令提示找不到,执行下面的代替
    $HOME/bin/gitolite setup -pk YourName.pub

克隆管理库到本地

不要直接在服务器上创建和管理仓库,仓库管理是通过叫gitolite-admin的仓库进行的,这个仓库在初始化gitolite时就已经生成了,管理员可以克隆到本地进行配置,在客户端执行

git clone git@服务器地址/gitolite-admin.git

如果提示输入密码,编辑客户端的~/.ssh/config文件,添加以下内容:

Host 服务器地址
    HostName 服务器地址
    User git
    Port 22
    IdentityFile /home/用户名/.ssh/私钥文件名

添加用户和仓库

gitolite-admin里面两个文件夹keydir和conf:

  1. keydir存储用户的公钥,添加用户可以直接拷贝用户的公钥到此文件夹;
  2. conf目录里的gitolite.conf是配置文件,格式如下:
    1
    2
    3
    4
    repogitolite-admin
    RW+ = id_rsa
    repo testing
    RW+ = @all

比如要添加一个仓库‘foo’,并给alice,bob和carol不同的权限,首先把他们的公钥(alice.pub,bob.pub,carol.pub)拷贝到keydir;然后编辑conf/gitolite.conf添加:

repo foo
    RW+         =   alice
    RW          =   bob
    R           =   carol

最后把修改push到服务器:

git add conf
git add keydir
git commit -m "added foo, gave access to alice, bob, carol"
git push

服务器会自动添加用户到~/.ssh/authorized_keys,并且添加一个新的空仓库’foo’。

上述操作完成后,alice、bob和carol就可以将仓库克隆到本地:
git clone git@服务器地址:foo

查看对仓库的操作权限,可以在客户端执行
ssh git@服务器地址 info

访问规则示例

gitolite的访问规则功能强大,以下是示例:

repo foo
    RW+                     =   alice
    -   master              =   bob
    -   refs/tags/v[0-9]    =   bob
    RW                      =   bob
    RW  refs/tags/v[0-9]    =   carol
    R                       =   dave

规则解释:  

  • alice对所有branch和tag拥有所有权限--create, push, delete, rewind/overwrite等等
  • bob可以创建或者fast-forward push名字中不以’master‘开头的branch,可以创建不以v+数字开头的tag
  • carol只可以创建v+数字开头的tag
  • dave只有只读权限,可以clone/fetch。

管理组

某些时候使用组来管理用户是非常方便的,下面是两个组:

@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是一个特殊组名称,既可以指所有的仓库,可以指所有的用户。

常用命令

客户端可以通过ssh远程执行一些命令,以下命令可以查看帮助:
ssh git@host help
info是最长用到的命令,在命令后跟上’-h’可以查看命令的用法。

在服务器端有非常丰富的使用命令,运行gitolite help查看详细信息。

参考资料

https://github.com/sitaramc/gitolite

Contents
  1. 1. 安装准备
  2. 2. 添加git用户
  3. 3. 安装gitolite
    1. 3.1. 克隆管理库到本地
    2. 3.2. 添加用户和仓库
  4. 4. 访问规则示例
  5. 5. 管理组
  6. 6. 常用命令
  7. 7. 参考资料