天天看點

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即可送出。