Gitolite+Gitweb配置实现Git权限管理

文章中使用的server,指的是的服务器端的公网ip。
/mnt是我的阿里云外挂盘,新建用户不指定目标位置,会自动在/home下生成。

Gitolite配置

在指定目录/mnt/git下建立一个git的用户并给用户git设置密码。(服务器端-用户:root)

useradd -d /mnt/git -s /bin/bash git
passwd git

测试是否建立成功,如果通过ssh连接成功即证明用户已经建立成功。

ssh git@server

clone gitolite(服务器端-用户:git)

// 切换到git用户
su git
// 切换到git根目录
cd
// clone gitolite
git clone https://github.com/sitaramc/gitolite.git

成功后会在根目录看到一个gitolites的目录。

客户端生成秘钥(客户端)

ssh-keygen

会在你登录的用户的目录下找到.ssh目录,我的目录是C:\Users\new.ssh,复制id_rsa.pub到d盘根目录。

通过ssh上传id_rsa.pub,并重命名为admin.pub。

// 切换到d盘目录执行
scp id_rsa.pub git@server:admin.pub

执行完成后,切换到服务器端可以在git用户的根目录下找到admin.pub

开始安装gitolite (服务器端-用户:git),所有操作都是在git的根目录。

注意点:
进入.ssh目录,如果有authorized_keys,删除即可。

// 新建bin目录
mkdir bin

// 安装gitolite,默认会安装到bin,如果想安装到你自己之的指定的目录请参考官方安装 -to
gitolite/install -ln

// 配置秘钥
bin/gitolite setup -pk admin.pub

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

客户端clone gitolite-admin(客户端)

// 结尾不需要加.git
git clone git@server:gitolite-admin

添加新用户(客户端)

修改gitolite-admin/conf/gitolite.conf

@developer  =   weiwei1628 mac

repo gitolite-admin
RW+ = weiwei1628 mac

repo testing
RW+ = @all

repo anhei
RW+ = @developer

将新用户的key都放到keydir

push到服务器即可,查看是否成功,去服务器进入git用户,查看.ssh/authorized_keys,里边会多了新的key。

Gitweb配置

安装(服务器端-用户:root)

yum install gitweb

配置(服务器端-用户:root)

/etc/gitweb.conf

$projectroot = "/home/git/repositories/";

重启httpd(服务器端-用户:root)

service httpd restart

即可看到gitweb的网站,但是会出现404找不到项目的情况。
这个问题是权限问题,查不不少资料,也遇到不少坑。
最终的解决方案:
首先要修改/home/git/.gitolite.rc中的UMASK,将0007修改为0027。

修改git及其根目录的读写权限为 755。

// 切换到root,在root根目录执行
chmod -R 755 /mnt/git

网上有配置方法,但是gitweb是找到项目了。但是客户端有clone不下文件了。提示秘钥没权限

chmod g+r /mnt/git/projects.list
chmod -R g+rx /mnt/git/repositories