本文介紹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