本方案采用gitolite做git用户权限管理。
- 创建git用户,并切换到git用户。
# 需要root权限
useradd -g git git
# 修改git用户密码
passwd git
# 切换用户
su git
- 拉取gitolite代码。
git clone https://github.com/sitaramc/gitolite
- 安装gitolite。
mkdir $HOME/bin
# 执行gitolite安装脚本
$HOME/gitolite/install -to $HOME/bin
# 可能报错,安装脚本需要perl环境,和perl模块perl-Data-Dumper
# Can't locate Data/Dumper.pm in @INC (@INC contains:
# /home/git/gitolite/src/lib /usr/local/lib64/perl5 /usr/local/share/perl5
# /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5
# /usr/share/perl5 .) at /home/git/gitolite/src/lib/Gitolite/Common.pm line 67.
# BEGIN failed--compilation aborted at
# /home/git/gitolite/src/lib/Gitolite/Common.pm line 67.
# Compilation failed in require at gitolite/install line 15.
# BEGIN failed--compilation aborted at gitolite/install line 15
# 安装perl-Data-Dumper,需要root权限
yum install perl-Data-Dumper.x86_64
#成功后再次执行安装脚本
$HOME/gitolite/install -to $HOME/bin
ls $HOME/bin
# 显示如下,安装成功
commands gitolite gitolite-shell lib syntactic-sugar triggers VERSION VREF
- 配置gitolite,需要设置一个管理员用户,例如
who
。
# 将管理员who的ssh公钥copy到目录下,如果公钥不存在,请到对应的目录运行ssh-keygen -t rsa生成
scp who@10.1.161.20:~/.ssh/id_rsa.pub ./who.pub
# 初始化git服务,设置who为管理员
bin/gitolite setup -pk ./who.pub
# 初始化后创建了repositories和.gitolite目录
# repositories/gitolite-admin.git是管理员配置仓库
# .gitolite/对应gitolite-admin.git的内容
# 所有配置修改必须由管理员提交到gitolite-admin.git
查看 .gitolite/conf/gitolite.conf
下的文件,如下
repo gitolite-admin
RW+ = who
repo testing
RW+ = @all
表示who
具有gitolite-admin仓库的读写权限。
所有人
都有testing仓库的读写权限。所有人
指的是在 `.gitolite/keydir中放置了ssh公钥的人。
- 现在可以登录
who
的账号,然后拉取gitolite
管理仓库,进行配置修改,修改后push
到服务器,修改即时生效。
ssh who@10.1.161.20
# 如果clone失败,说明之前配置管理员的ssh公钥和当前用户的私钥不匹配
git clone git@10.1.161.21:gitolite-admin
ls gitolite-admin
conf keydir
# do some change, add & commit
# 添加用户:将新用户的ssh公钥放置在keydir中,即可添加用户,并在conf/gitolite.conf中配置用户权限。
# 建立仓库:在conf/gitolite.conf中增加repo可以创建新仓库,并添加用户权限
git push