管理Gitolite,管理員的任務就比較繁重了,其所有的管理都是通過安裝gitolite是自動創建的gitolite-admin庫來操作的,下面就幾個常用的管理任務作簡單介紹。
1. 管理員克隆gitolite-admin管理庫
git+gitolite的安裝與配置參見搭建Git服務器(二),安裝後在gitadmin管理員用戶目錄下在自動創建一個用於自身管理的git庫:gitolite-admin.git。管理員可以通過git出該管理庫,在客戶端進行管理。
$git clone gitadmin:gitolite-admin //此處使用的是SSH主機別名,會在當前目錄下創建gitolite-admin
gitolite-admin 目錄下有兩個目錄conf/ 和 keydir/ 。
l keydir/gitadmin.pub 文件,目錄 keydir 下初始時只有一個用戶公鑰,即 amdin 用戶的公鑰。
l conf/gitolite.conf 文件,該文件爲授權文件。初始內容爲:
#gitolite conf
# please seeconf/example.conf for details on syntax and features
repo gitolite-admin
RW+ = gitadmin
repo testing
RW+ = @all
缺省授權文件中只設置了兩個版本庫的授權:
l gitolite-admin,即本版本庫(gitolite管理版本庫)只有 admin 用戶有讀寫和強制更新的權限。
l Testing,缺省設置的測試版本庫,設置爲任何人都可以讀寫以及強制更新。
2. 增加新用戶
只要將新用戶的公鑰添加到 gitolite-admin 版本庫的 keydir 目錄下,即完成新用戶的添加。假設需要增加用戶名爲gituser的用戶。
(1)管理員從用戶那獲得公鑰gituser.pub。該公私鑰文件的生成:
$ssh-keygen –f ~/.ssh/gituser //客戶端執行
(2)將該gituser.pub放到gitolite-admin本地的管理庫用的keydir目錄下。
$cp ~/.ssh/gituser.pub /pathto/keydir/
(3)將該公鑰加入版本庫中
$git add /pathto/keydir
$git status
#On branch master
#Changes to be committed:
# (use “git reset HEAD <file>…” to unstage)
#
# new file: keydir/gituser.pub
#
(3)提交對版本庫的修改
$git commit –m “add user:gituser”
(4)push到服務器,完成同步,真正添加新用戶
$git push //會有WARNING,其中的警告是說新添加的三個用戶在授權文件中沒有被引用,下面修改授權文件,爲用戶受權。
(5)爲gituser創建SSH主機別名,回到客戶端$vi ~/.ssh/config,添加以下內容:
host gituser
user gitadmin
hostname labserver
port 22
identityfile ~/.ssh/gituser
3. 更改授權文件,爲用戶授權
新用戶添加完畢,需要重新進行授權。更改授權的方法也非常簡單,即修改 conf/gitolite.conf 配置文件,提交併 push。
(1)管理員進入 gitolite-admin 本地克隆版本庫中,編輯 conf/gitolite.conf
$vi conf/gitolite.conf
在打開的文件頂部添加:@team1 = gituser gitadmin,然後在repo testing 下添加:
RW+ = @team1 對testing版本庫以team的形式進行授權。(team又是可以嵌套如:
@allteam = @team1 @team2 @team3。對team的所有定義規則都適應於版本庫,如:
@repo1 = project1 project2, repo @repos1 @repos2。)
(2)添加改動,並提交,以及與同步服務器
$git add conf/gitolite.conf
$git commit –q –m “new team @team1 auth forrepo testing.”
$git push
4. 在服務器創建版本庫
(1)通過管理員創建版本庫,只需要在conf/gitolite.conf中添加一個規則即可,等同步到服務器後會自動創建:
repo project
C = @all
RW+ = @all
(2)上傳現有的版本庫,首先在本地創建一個版本庫project
$mkdir project && cd project
$git init
$touch README // 此處一定要創建文件,不然會出現error:
(error: src refspec master does not match any.
error: failed to push some refs to'ssh://xxxxx.com/project.git')
$git add README
$git commit –m “Initial repo.”
$git remote add origin gituser:/project.git //此處一定要保證(1)完成,並有C(創建權限)
$git push origin master
完成現在版本庫的上傳
(3)使用通配符,用戶可以創建自已的版本庫,即用戶自己的版本庫空間,使用通配符需要開啓該功能位,$GL_WILDREPOS默認爲0(不開啓),在用戶的主目錄下的配置文件 .gitolite.rc 中將該功能位設置爲1:$GL_WILDREPOS = 1.
編輯conf/gitolite.conf,添加:
repo users/CREATOR/[a-zA-Z].*
C = @all
RW+ = @all
其中CREATOR爲創建者的用戶名,算是一種宏定義。在git用戶的電腦上,進行第(2)步操作,唯一不同地方的是:
$git remote add origin gituser:/users/gituser/project.git
本篇只介紹了基本的管理操作,諸如用戶分支的權限控制、及各種權限標識符表示的意義沒有涉及,可以自行查閱相關資料。
輝輝
(FightingBull Studio)