之前写过一个Git服务器的简单搭建,那个的权限管理是通过手动配置的。这次用Gitolite来管理,方便快捷。
环境:Ubuntu Server 16.04.3(命名GitServer),网络正确配置192.168.xx.xx(可以连接Internet),默认root账户
1. 安装Git的过程和上篇类似,就简单说
apt-get update
# 安装 ssh
apt-get install openssh-server
# 安装 Git
apt-get install git
可能是因为新版的原因,git用户已经自动创建好,不需要手动创建git用户。
2. 切换到git用户,生成一对RSA密钥
# 先在 root 用户下创建 git 用户的密码(这是个好习惯)
passwd git
# 切换到 git 用户
su git
# 生成一对 RSA 密钥
ssh-keygen -t rsa
# 一路回车下来创建成功
# 进入密钥的目标,将公钥文件改名
cd /home/git/.ssh
mv id_rsa.pub admin.pub
# GitServer 服务器将负责我的 Git 仓库管理(也可以用其他机器),命名成 admin.pub
3. 安装Gitolite
# 进入 git 用户主目录(~)
cd /home/git
# 下载 gitolite 的仓库
git clone git://github.com/sitaramc/gitolite
# 创建 bin 文件夹
mkdir -p $HOME/bin
# 安装 gitolite
gitolite/install -to $HOME/bin
4. 配置Gitolite
# 进入密钥目录
cd /home/git/.ssh
# 将管理的公钥文件 setup 到 gitolite 中
$HOME/bin/gitolite setup -pk admin.pub
# 切回git主目录,多出了一个文件、一个文件夹
cd /home/git
ls
# projects.list 文件:仓库列表文件(gitolite自动创建)
# repositories 文件夹:存放所有 git 仓库的文件夹
# repositories 文件夹已经存在两个仓库 gitolite-admin.git、test.git
# gitolite-admin.git 管理配置权限的仓库
# testing.git 测试仓库
# 管理员把 gitolite-admin 直接 clone 到本地,就可以进行管理 git 服务
5. 下载服务器端的远程管理仓库
我是在 GitServer 这个电脑上下载 gitolite-admin,也可以在其他电脑上下载 gitolite-admin 进行管理。
注:使用其他电脑进行管理,需要将其他电脑生产的公钥文件 setup 到 gitolite 中。
# 进入 git 主目录
cd /home/git
# 下载远程管理仓库, 请把 192.168.xx.xx 换成你自己服务器的域名或者ip
git clone git@192.168.xx.xx:/gitolite-admin
# 进入 gitolite-admin 目录,可以看到 conf、keydir 两个文件夹
cd gitolite-admin
# keydir 用来存放所有用户的pub公钥文件的,当前目录有 admin.pub 文件
# conf 用来配置 Git 仓库、用户、用户组权限的,由目录下 gitolite.conf 文件来配置
6. 配置gitolite.conf
# 进入 conf 目录,编辑 gitolite.conf
cd conf
vi gitolite.conf
# 文件内容如下:
repo gitolite-admin # 仓库名gitolite-admin
RW+ = admin # 用户 admin 拥有可读写权限
repo testing # 仓库名testing
RW+ = @all # 用户组 all 拥有可读写权限
根据需要配置权限:
创建管理组 admin,组员有 admin 和 rdongc
创建开发组 dev,组员有 2012
创建仓库 test2012
admin组 拥有 master 分支读写权
dev组 拥有 dev 分支读写权
# 需要将两个用户的公钥(rdongc.pub、2012.pub)上传到 /home/git/gitolite-admin/keydir
7. 应用修改到远程服务器端
刚刚的配置就是修改了 gitolite-admin 仓库的文件,还需要将修改后的文件提交到服务器端
# 切换到 gitolite-admin 目录
cd /home/git/gitolite-admin
# 配置 git config,告诉 Git 你是谁 (根据自己情况)
git config --global user.name "admin"
git config --global user.email "admin@example.com"
# 提交到远程服务器端(提交的文件:gitolite.conf、rdongc.pub、2012.pub)
git add .
git commit -m "update gitolite-admin"
git push
# 进入/home/git/repositories/目录,新增了 test2012.git 的仓库文件,这是一个空白仓库
8. 客户端clone项目
现在rdongc、2012两个用户的客户端电脑可以 clone 仓库 test2012.git
git clone git@192.168.xx.xx:test2012.git
OK,完成!