举个栗子

好读书,不求甚解

在Centos上搭建git服务

Kevalin's Avatar 2021-03-21

安装git

centos系统上安装git

1
2
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
yum install git

接下来我们 创建一个git用户组和用户,用来运行git服务

1
2
groupadd git
useradd git -g git

安装gitolite

使用gitolite对git库进行权限控制

客户端生成密钥

1
ssh-keygen #疯狂回车即可

上传你本机的公钥到git服务器git用户的家目录,来为gitolite的管理员授权

1
2
scp ~/.ssh/id_rsa.pub root@yourServer:/home/git/admin.pub
chown git:git /home/git/admin.pub

在服务器上安装gitolite

注意,进入.ssh目录,如果存在authorized_keys,删除即可。

1
2
3
4
5
6
7
# 切换到git用户
su git
mkdir bin
git clone https://github.com/sitaramc/gitolite.git
# 安装gitolite,默认会安装到bin,如果想安装到你自己之的指定的目录请参考官方安装 -to
gitolite/install -ln
bin/gitolite setup -pk admin.pub

测试是否执行成功
首先git根目录下是否生成了projects.listrepositories
同时可以进入.ssh,可以看到新生成的authorized_keys,以后每一次提交新用户都会写到这个里边。判断是否用户添加成功,看这个里边文件是否新增了那个用户的key即可。

客户端clone gitolite-admin来控制权限

在客户端修改gitolite的配置文件,然后push到服务器上完成权限更新

1
2
# 结尾不需要加.git
git clone git@server:gitolite-admin

在客户端修改gitolite配置

gitolite-admin只有2个文件夹,conf/gitolite.conf控制权限配置,keydir目录用来存放所有客户端的公钥

举个栗子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# gitolite.conf

# 定义一个前端组,下面有2个用户,这些用户名必须和放在keydir里面的文件名前缀相对应
@admin = admin
@front-end = lily tom

# admin组有对gitolite-admin的读写权限
repo gitolite-admin
RW+ = @admin

# 所有人对testing仓库有读写权限
repo testing
RW+ = @all

# 将BlocksCrush仓库的读写权限赋给front-end组
# x用户对此仓库只有读权限
repo BlocksCrush
RW+ = @front-end
R = x

修改完配置之后直接push到远端仓库既可以。如果是新建的空仓库,只需要在配置里面写上名字,push更新之后gitolite会自动在/home/git/repositories目录新建你配置的仓库。
访问远程仓库的地址一般是git@yourServer:yourRepoName.git

gitolite的详细配置可以参考此处Git-Gitolite

本文作者 : Kevalin
本文使用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
本文链接 : https://kevalin.github.io/2021/03/21/%E6%90%AD%E5%BB%BAgit%E6%9C%8D%E5%8A%A1/