在uos下使用gitolite搭建git服务器
-
检查基础服务
检查服务器是否有sshd相关的进程信息,git是否安装,perl环境和perl模块perl-Data-Dumper是否安装。一般服务器上都安装了这些基础的服务。 -
创建git用户
# 在root权限下
useradd -m git #创建新的用户git专门管理git服务器
# 修改git用户密码
passwd git
# 切换用户
su git
- 下载gitolite代码并安装gitolite
# 在git的home目录下clone gitolite代码
git clone https://github.com/sitaramc/gitolite
# 安装gitolite
mkdir bin
$HOME/gitolite/install -to $HOME/bin # 一定要用绝对地址,用相对地址会报错
ls bin
# 显示下列文件就说明成功安装
commands gitolite gitolite-shell lib syntactic-sugar triggers VERSION VREF
- 设置一个管理员用户dvt0551
# 在管理员dvt0551的home目录下,检查是否有公钥
# ~/.ssh/is_rsa.pub是否存在
ssh-keygen -t rsa # 如果不存在,存在就跳过这一步
# 将管理员dvt0551的ssh公钥copy到git的home目录下
cp ~/.ssh/is_rsa.pub /home/git/dvt0551.pub
# 初始化gitolite,在git目录下并设置dvt0551为管理员
bin/gitolite setup -pk ./dvt0551.pub
# 初始化后创建了repositories和.gitolite目录
# repositories/gitolite-admin.git是管理员配置仓库
# .gitolite/对应gitolite-admin.git的内容
# 所有配置修改必须由管理员提交到gitolite-admin.git
- 用dvt0551登陆,然后克隆gitolite管理仓库
# 在dvt0551的home目录下
git clone git@192.168.137.121:gitolite-admin
ls gitolite-admin
conf keydir
# do some change, add & commit
# 添加用户:将新用户的ssh公钥放置在keydir中,即可添加用户,并在conf/gitolite.conf中配置用户权限。
# 建立仓库:在conf/gitolite.conf中增加repo可以创建新仓库,并添加用户权限
- 管理用户权限
在conf/gitolite.conf中没有设置的repo会提示以下错误
# 假设你之前创建了helloworld版本库,现在使用git clone git@192.168.137.121:helloworld 试图clone
FATAL: R any helloworld id_rsa DENIED by fallthru
(or you mis-spelled the reponame)
fatal: The remote end hung up unexppectedly
- 将需要指定权限的用户的ssh公钥文件,存放在gitolite-admin版本库的keydir目录下(如果提交的都是id_rsa.pub,可以将其重命名为该用户的id或者名称,同时也推荐这样重命名,以明示哪个公钥文件是哪个用户的),因为我们初始化时,gitolite已经将该超级管理员的公钥文件自动拷进去了,所以省略此步骤
- 编辑conf目录下的gitolite.conf文件,添加helloworld版本库管理组,为超级管理员指定读写权限(RW+,具体的权限定义,参考gitolite官方文档)
repo helloworld
RW+ = dvt0551
- 提交到Git仓库
git add conf keydir
git commit -m "add the repo and add RW+ to dvt0551"
git push
这样一个基本的Git服务器就搭建完成了!
- 设置权限,让普通用户可以创建自己的版本库
但是,这样设置以后,用户仍然不能自己创建版本库并提交到Git服务器上。每次有新的版本库创建后,需要管理员手动添加新的repository,然后设置权限,很麻烦。下面就是解决方法
# 管理员dvt0551在~/gitolite-admin/conf/gitolite.conf中添加一下代码
@administrators = dvt0551
repo CREATOR/[a-zA-Z].*
C = @all # 设置用户可以在自己的名字空间下(<userid>/),自己创建版本库。
RW+ = CREATOR # 设置版本库创建者对版本库具有完全权限。
RW = WRITERS
R = READERS @administrators # 让管理员组administrators的用户有读取权限
# 至于WRITERS & READERS这两个用户组,是有ssh命令创建,具体可以使用setperms命令来设置。
例如,用户dev1执行git push命令在gitolite服务器上自己的名字空间下创建版本库。
git push git@192.168.137.121:dev1/repo1.git master