本文介绍ubutu下使用gitolite实现多项目的权限管理
1、安装git
sudo apt-get install git
2、设置Git的user name和email:
git config --global user.name "git_name"
git config --global user.email "email"
3、生成公钥
ssh-keygen -t rsa -C "email"
如果不设置密码直接3个回车即可,生成的公钥(id_rsa.pub)会在主目录的.ssh文件下面。
拷贝id_rsa.pub到tmp目录下,后面会用到
cp ~/.ssh/id_rsa.pub yourname.pub
4、添加一个git用户
sudo adduser git
5、安装gitolite
切换到git用户
su git
进入git主目录
cd /home/git
创建bin目录
mkdir bin
下载gitolite
git clone git://github.com/sitaramc/gitolite
安装gitolite
gitolite/install -ln ~/bin # please use absolute path here
gitolite setup -pk /tmp/yourname.pub
6、克隆gitolite-admin
git clone git@127.0.0.1:/home/git/repositories/gitolite-admin #我是再本地模拟配置的,所以ip为本地
到此工作完成。
7、管理
Gitolite 会创建一个特殊仓库 gitolite-admin ,用于管理用户权限及仓库信息。
git clone git@host_git_repo:gitolite-admin
1、 添加用户
以添加位于主机 host-dev-1 的用户 dev_user_1 为例:
clone Gitolite 管理配置目录 gitolite-admin 到本地
将用户 dev_user_1 的 SSH 公钥保存到 gitolite-admin/keydir/ ,文件名要遵守 Gitolit 要求的格式:
* 不能将同一密钥分配给不同用户,虽然在其他情况下是没有任何问题的,但是 gitolite 是通过密钥来区分和检索不同用户的,我理解它的工作原理是,它读取 git 用户下 .ssh/authorized_keys 文件,读入为 Hash 结构,所以刷新该文件时,各条记录是无次序的,但是一个用户连接进来时,Gitolite 读取用户的公钥,并按文件 .ssh/authorized_keys 中公钥出现顺序比对,找到符合的第一个,然后确认就是该文件中公钥对应的用户,然后根据该用户确认权限。也就是说,即使连接的用户是位于主机 host-dev-1 的用户 dev_user_1 ,如果 .ssh/authorized_keys 中有用户 dev_user_2 的公钥与它相同,并且首先出现,那么 Gitolite 认为 dev_user_1 就是 dev_user_2 ,并使用 dev_user_2 的权限,这不是我们需要的
* 文件需要以 .pub 结尾,否则不能被 Gitolite 导入
* Gitolite 仍然支持(兼容)旧的命名规范,对于本例是 dev_user_1@host-dev-1.pub ,注意,host-dev-1 是用户所在主机名(或其它标识信息),在 Gitolite 权限配置文件 conf/gitolite.conf 中不应当出现。Gitolite 仍然支持 Email 地址形式的主机名,但必须至少存在一个 "**.**" ,比如 dev_user_1@gmail.com ,Gitolite 以此认定是一个 Email 地址,对于 dev_user_1@gmail-com ,它认为 gmail-com 是一个主机名(或其它标识信息),Email 形式的用户名需要完整地写在 Gitolite 权限配置文件 conf/gitolite.conf 中
修改权限配置文件 conf/gitolite.conf ,为该用户分配指定的权限,注意,用户名是 dev_user_1 ,而非 dev_user_1@host-dev-1 : repo DEV_REPO
RW+ = dev_user_1
提交到本地,然后推送到 gitolite-admin 远程仓库
2、删除用户
删除用户也很简单,删除用户的公钥,删除权限配置文件 conf/gitolite.conf 中的用户名
提交到本地,然后推送到 gitolite-admin 远程仓库
3、添加/删除仓库
如果是添加一个新的仓库,那么操作十分简单,直接在权限配置文件 conf/gitolite.conf 中添加该仓库名: repo New_DEV_REPO
提交到本地,然后推送到 gitolite-admin 远程仓库,Gitolite 会自动创建这个仓库
gitolite all-in-one page