本文讲解在ubuntu上安装gitolite,为客户端提供git仓库服务器功能。ubuntu版本:server 16.04
by kowen
安装准备
安装gitolite前,要安装 git,openssh-server和 openssh-client
sudo apt-get update
sudo apt-get -y install git openssh-server openssh-client
准备好你的ssh私钥和公钥
没有的话可在本地执行ssh-keygen -t rsa -C "yourname@example.com
生成一个,生成后在~/.ssh/目录里,id_rsa是私钥,id_rsa.pub是公钥,文件生成后可以改名。上传公钥
将公钥上传到服务器备用,比如是/tmp/YourName.pub
添加git用户
sudo adduser --system --shell /bin/sh --group --disabled-password --home /home/git git
- 使用命令添加加上--system参数,用户就不会在登陆界面显示
- home是git用户主目录,也是git仓库的存储目录,如果仓库比较大可以放在别的盘中,比如我的就是/data/git
安装gitolite
- 登录到git用户
sudo su - git
- 确保 ~/.ssh/authorized_keys 文件不存在或者为空
- 把公钥拷贝到git主目录下
cp /tmp/YourName.pub $/Home/YourName.pub
- 下载并安装gitolite
git clone https://github.com/sitaramc/gitolite
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin
- 初始化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:
- keydir存储用户的公钥,添加用户可以直接拷贝用户的公钥到此文件夹;
- conf目录里的gitolite.conf是配置文件,格式如下:
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
查看详细信息。