本文講解在ubuntu上安裝gitolite,為客戶端提供git倉(cāng)庫(kù)服務(wù)器功能。ubuntu版本:server 16.04
by kowen
安裝準(zhǔn)備
安裝gitolite前,要安裝 git,openssh-server和 openssh-client
sudo apt-get update
sudo apt-get -y install git openssh-server openssh-client
準(zhǔn)備好你的ssh私鑰和公鑰
沒(méi)有的話可在本地執(zhí)行ssh-keygen -t rsa -C "yourname@example.com
生成一個(gè)欲主,生成后在~/.ssh/目錄里,id_rsa是私鑰逝嚎,id_rsa.pub是公鑰,文件生成后可以改名扁瓢。上傳公鑰
將公鑰上傳到服務(wù)器備用,比如是/tmp/YourName.pub
添加git用戶
sudo adduser --system --shell /bin/sh --group --disabled-password --home /home/git git
- 使用命令添加加上--system參數(shù)补君,用戶就不會(huì)在登陸界面顯示
- home是git用戶主目錄引几,也是git倉(cāng)庫(kù)的存儲(chǔ)目錄,如果倉(cāng)庫(kù)比較大可以放在別的盤中,比如我的就是/data/git
安裝gitolite
- 登錄到git用戶
sudo su - git
- 確保 ~/.ssh/authorized_keys 文件不存在或者為空
- 把公鑰拷貝到git主目錄下
cp /tmp/YourName.pub $/Home/YourName.pub
- 下載并安裝gitolite
git clone https://github.com/sitaramc/gitolite
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin
- 初始化gitolite, 同時(shí)配置管理員
gitolite setup -pk YourName.pub
如果以上命令提示找不到伟桅,執(zhí)行下面的代替
$HOME/bin/gitolite setup -pk YourName.pub
克隆管理庫(kù)到本地
不要直接在服務(wù)器上創(chuàng)建和管理倉(cāng)庫(kù)敞掘,倉(cāng)庫(kù)管理是通過(guò)叫g(shù)itolite-admin的倉(cāng)庫(kù)進(jìn)行的,這個(gè)倉(cāng)庫(kù)在初始化gitolite時(shí)就已經(jīng)生成了楣铁,管理員可以克隆到本地進(jìn)行配置玖雁,在客戶端執(zhí)行
git clone git@服務(wù)器地址/gitolite-admin.git
如果提示輸入密碼,編輯客戶端的~/.ssh/config文件盖腕,添加以下內(nèi)容:
Host 服務(wù)器地址
HostName 服務(wù)器地址
User git
Port 22
IdentityFile /home/用戶名/.ssh/私鑰文件名
添加用戶和倉(cāng)庫(kù)
gitolite-admin里面兩個(gè)文件夾keydir和conf:
- keydir存儲(chǔ)用戶的公鑰赫冬,添加用戶可以直接拷貝用戶的公鑰到此文件夾;
- conf目錄里的gitolite.conf是配置文件溃列,格式如下:
repogitolite-admin
RW+ = id_rsa
repo testing
RW+ = @all
比如要添加一個(gè)倉(cāng)庫(kù)‘foo',并給alice劲厌,bob和carol不同的權(quán)限,首先把他們的公鑰(alice.pub,bob.pub,carol.pub)拷貝到keydir听隐;然后編輯conf/gitolite.conf添加:
repo foo
RW+ = alice
RW = bob
R = carol
最后把修改push到服務(wù)器:
git add conf
git add keydir
git commit -m "added foo, gave access to alice, bob, carol"
git push
服務(wù)器會(huì)自動(dòng)添加用戶到~/.ssh/authorized_keys补鼻,并且添加一個(gè)新的空倉(cāng)庫(kù)'foo'。
上述操作完成后雅任,alice辽幌、bob和carol就可以將倉(cāng)庫(kù)克隆到本地:
git clone git@服務(wù)器地址:foo
查看對(duì)倉(cāng)庫(kù)的操作權(quán)限,可以在客戶端執(zhí)行
ssh git@服務(wù)器地址 info
訪問(wèn)規(guī)則示例
gitolite的訪問(wèn)規(guī)則功能強(qiáng)大椿访,以下是示例:
repo foo
RW+ = alice
- master = bob
- refs/tags/v[0-9] = bob
RW = bob
RW refs/tags/v[0-9] = carol
R = dave
規(guī)則解釋:
- alice對(duì)所有branch和tag擁有所有權(quán)限--create, push, delete, rewind/overwrite等等
- bob可以創(chuàng)建或者fast-forward push名字中不以’master‘開頭的branch,可以創(chuàng)建不以v+數(shù)字開頭的tag
- carol只可以創(chuàng)建v+數(shù)字開頭的tag
- dave只有只讀權(quán)限虑润,可以clone/fetch成玫。
管理組
某些時(shí)候使用組來(lái)管理用戶是非常方便的,下面是兩個(gè)組:
@staff = alice bob carol
@interns = ashok
repo secret
RW = @staff
repo foss
RW+ = @staff
RW = @interns
組成員可以累加拳喻,下面對(duì)@staff的定義和上面的效果是一樣的:
@staff = alice bob
@staff = carol
組也可以包含其他組:
@all-devs = @staff @interns
@all是一個(gè)特殊組名稱哭当,既可以指所有的倉(cāng)庫(kù),可以指所有的用戶冗澈。
常用命令
客戶端可以通過(guò)ssh遠(yuǎn)程執(zhí)行一些命令钦勘,以下命令可以查看幫助:
ssh git@host help
info是最長(zhǎng)用到的命令,在命令后跟上'-h'可以查看命令的用法亚亲。
在服務(wù)器端有非常豐富的使用命令彻采,運(yùn)行gitolite help
查看詳細(xì)信息。