git 服务器搭建
1.Gitolite 简介
-
Gitolite 是对 Git 使用的一个封装
-
Giolite 服务器其实是使用perl脚本对通过 Git 命令进行权限检查
-
Gitolite 服务器的管理是通过一个名字叫做 gitolite-admin 的 Git 仓库进行管理的
2.Gitolite 的安装
这里使用的是 ubuntu22.04 平台,其它 ubuntu 版本也是类似的。
-
配置 git 的管理账号
sudo adduser git
-
分配管理员权限给 git 账号
sudo usermod -a -G sudo git
-
后续操作切换到 git 账号
sudo su git
-
2.2 安装 git 和 ssh-server
sudo apt-get install git openssh-server openssh-client
-
2.3 生成管理员公钥
在管理员电脑上执行keygen指令,并将生成的 id_rsa.pub 发送到用户git的目录下.(也可以直接在 git 用户下执行 keygen 指令,则此时 git 用户拥有仓库的管理权限)
ssh-keygen -t rsa
-
2.4 下载 gitolite 源码
git clone https://github.com/sitaramc/gitolite
-
2.5 在 git 用户上进行安装,安装目录为 /home/git/bin
mkdir bin gitolite/install -to /home/git/bin
-
2.6 设置 gitolite 管理员
此处的id_rsa.pub即为前面生成的管理员公钥
bin/gitolite setup -pk id_rsa.pub
执行完上面指令后,程序会在/home/git/repositories下生成两个默认的仓库 gitolite-admin.git 和 testing.git,其中gitolite-admin.git即为管理员仓库.
-
2.7 gitolite管理员下载管理仓库
git clone git@< 服务器IP >:gitolite-admin.git
3.Gitolite服务器管理
服务器管理通过编辑 gitolite-admin/conf 目录下 **gitolite.conf **文件来实现服务器上仓库的增减以及用户权限管理. gitolite-admin/keydir 用于存放用户公钥. 管理员通过 ‘git push’ 修改至远端仓库使修改生效.
gitolite.conf 初始内容:
repo gitolite-admin
RW+ = id_rsa
repo testing
RW+ = @all
即目前服务器共有两个仓库, gitolite-admin 以及 testing, 其中公钥 id_rsa 的用户具有对仓库 gitolite-admin 的读写权限, 其余所有在 gitolite-admin/keydir 下有公钥的用户对 testing 仓库有读写权限
项目成员 ‘zhao’, ‘qian’ ,‘sun’ 通过在本机 git 下执行 “ssh-keygen -t rsa” 指令生成公钥,重命名为 zhao.pub, qian.pub, sun.pub,然后发送给管理员. 管理员将这三组公钥复制到 gitolite-admin/keydir 目录下并且提交到远程仓库. 则此时 ‘zhao’, ‘qian’ ,‘sun’ 默认在 group all下面, 即有了对 testing 的读写权限,可执行如下代码 clone testing 仓库到本地.
git clone git@<服务器ip>:testing.git
-
3.2 配置文件详细的语法规则
3.2.1 基本语法
(1)注释,以“#”作为注释的开发
(2)没有续行符“\”
(3)所有的东西都是用空格作为分隔符(不用逗号,分号等)
(4)用户名和代码库名可以包含’.’ ‘_’ '-'等,代码库可以包含"/",用户名可以有“@”
(5)组名必须以@开始3.2.2 权限管理
(1)R, 只读
(2)RW, 允许 push 一个分支 branch, 或者创建一个 branch/tag
(3)RW+, 可以快速推送, 倒回或者删除 branches or tags
3.2.3 组的定义
用户组和代码库组定义是一样的两者没差别。
-
简单定义了一个组
@developers = zhao qian sun
-
组的值是累积的所以也可以按下面这么定义,和上面的一样
@developers = zhao @developers = qian @developers = sun
-
组的定义可以嵌套,但值是立即展开的,也就是说后面定义的值,不会在加的嵌套的组里面
@developers = zhao qian @interns = sun @staff = @interns @developers @developers = li# li 用户并不属于 @staff 组
-
正常使用的一个例子, developers 组对 1806_SDK 具有读写权限 readonly 组对 1806_SDK 具有只读权限
@developers = zhao qian sun @readonly = li zhou repo 1806_SDK RW+ = @developers R = @readonly
-
-
3.3 新建/删除仓库
通过对 gitolite.conf 修改删除了**“testing”** 仓库并且新建了两个仓库,“1806_SDK” 以及 “hostapd”, 默认所有用户均对这两个仓库有读写权限
repo gitolite-admin RW+ = id_rsa repo 1806_SDK RW+ = @all repo hostapd RW+ = @all
参考文档: