天天看点

gitolite 对git进行权限管理

作者原创 请尊重知识。

第一步 配置本地、服务器git环境 省略。

第二步 创建服务器git账户 省略。

第三步 在服务器安装gitolite

3.1 设置gitolite工作目录

#cd /home/git
	#chown -R git:git /home/git
	#chmod -R 2755 /home/git
           

  请尊重知识,请尊重原创 更多资料参考请见  http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1

3.2下载gitolite

#git clone git://github.com/sitaramc/gitolite.git
           

3.3安装gitolite

#su git
	#cd ./gitolite
	#mkdir -p ~/bin
	#./install -to ~/bin
	#echo "PATH=$PATH:$HOME/bin" >> ~/.bashrc
	#source  ~/.bashrc   使环境变量生效
           

3.4 生成公钥与私钥

下一步需要使用到管理员的公钥,在客户端生成公钥与私钥,把公钥上传到git服务器

为了方便,我在git服务器本地生成公钥和私钥,也在git服务器本地进行测试。其实把私钥拷贝到客户端使用也可以。

#su root  切换到root用户

#ssh-keygen -t rsa -f jingfn

下面一直输入“回车”就可以,生成的公钥和私钥在当前下面

把jingfn.pub复制到根目录/下

#cp jingfn* /
           

将公钥jingfn.pub 私钥jingfn文件 权限修改为git

#chown git jingfn*
           

3.5 setup

#su git

#cd ~/bin

#./gitolite setup -pk /jingfn.pub

这一步容易出现 如下错误

FATAL: '/jingfn.pub' not a readable file
	FATAL: '/jingfn.pub' must have exactly one line
           

请仔细检查jingfn.pub文件的所有权是否是git. 可以考虑重新生成。

此ppk文件是客户端访问服务器的ssh密钥文件。在克隆的时候需要用到,

在提交代码的时候 同样用到。只要使用torioseGit软件,本地一般会有pageant服务并且出现在桌面右下角。

点击开 add key 将ppk文件加进去即可。

将会显示下面的初始化信息

Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
	Initialized empty Git repository in /home/git/repositories/testing.git/
	
           

3.6 生成ppk

找到刚刚生成的jingfn(私钥,与公钥一起生成)

下载puttygen,运行puttygen,点击Conversions菜单项中的Import key ,

选择在刚刚生成的jingfn文件 ,在puttygen的界面上点击Save private key按钮就可以把私钥转换为ppk的格式了,

并存放好自己的ppk。

3.7 克隆gitolite-admin管理仓库

方法一 使用图形化界面

右键点击 git clone

设置好 url ,其格式为 git:120.24.239.225:gitolite-admin

设置 load putty key 选择刚刚生成并保存的ppk文件。

这时候就可以直接clone了。一般设置了load putty key之后,pull 和push 都是不需要填写密码的。

方法二 使用git bash

前提仍然是 需要先设置好 load putty key,否则不允许通过。

shell> git clone [email protected]:gitolite-admin.git 
	
	提交修改到服务器
   shell> git add .
   shell> git commit -am "update gitolite conf file"
   shell> git remote rm origin
   shell> git remote add origin [email protected]:gitolite-admin.git
   shell> git push origin master
           

  方法三 在Linux客户端直接克隆

shell> git clone [email protected]:gitolite-admin.git 
   提交修改到服务器
   shell> git add .
   shell> git commit -am "update gitolite conf file"
   shell> git remote rm origin
   shell> git remote add origin [email protected]:gitolite-admin.git
   shell> git push origin master
           

  3.8 测试

   clone到本地的gitolite-admin 仓库,其结构为 keydir 和 conf

   keydir 用于存放需要访问各个仓库的客户端公钥,conf下的gitolite.conf 文件用于配置客户端的权限。

repo gitolite-admin
    RW+     =   jingfn

   repo testing
    RW+     =   @all
           

   在编辑gitolite.conf文件之前,服务器仓库testing.git 是可以正常被clone盗本地的,并且可以写入新的文件。

   编辑gitolite.conf文件 去除testing 仓库下的所有用户

repo gitolite-admin
    RW+     =   jingfn

   repo testing
           

这时候在本地 不管是push 还是pull 都是不被允许的。

到这里 基本完成了gitolite的权限配置。

3.9 用户组定义

repo gitolite-admin
			RW+     =   jingfn

		repo testing
			RW+     =   @all
			
		@admin = jingfn 
				
		@android_admin = jinchengLi jingfn
		@android = jinchengLi ouxch fwl jingfn joie luoyy Aaron dongzhuoyue
				
		@java_admin = jingfn 
		@java =jingfn joie wenquan zhengbobo
				
				
		repo gitolite-admin
		RW+     =   @admin
				
		repo android/..*
		C = @android_admin @admin
		RW = @android
				
		repo java/..*
		C = @java_admin @admin
		RW = @java

		repo kp-android
		C = @android_admin 
		RW = @android

		repo kp-android-old
		C = @android_admin 
		RW = @android
				
		repo kp-set-001
		C = @java_admin @admin
		RW = @java
           

这里修改了gitolite.conf文件 其权限分配规则是 ,定义了一组超级管理员@admin

以及 android 和java 的超级管理员和普通成员。

C 表示可以在该目录下创建版本库,创建版本库的用户拥有版本库的所有权限。

我们只需要添加一个 repo 并且push gitolite-admin 到服务器,服务器会自动新建

我们需要的新仓库,我们只需在本地客户端指向服务器git即可提交。