本節(jié)作為Gitolite的一個快速指南,指導(dǎo)基本的安裝和設(shè)置。不能完全替代隨Gitolite自帶的大量文檔。而且可能會隨時改變本節(jié)內(nèi)容,因此你也許想看看最新的版本。
Gitolite是在Git之上的一個授權(quán)層,依托sshd或者h(yuǎn)ttpd來進(jìn)行認(rèn)證。(概括:認(rèn)證是確定用戶是誰,授權(quán)是決定該用戶是否被允許做他想做的事情)。
Gitolite允許你定義訪問許可而不只作用于倉庫,而同樣于倉庫中的每個branch和tag name。你可以定義確切的人(或一組人)只能push特定的"refs"(或者branches或者tags)而不是其他人。
安裝Gitolite非常簡單, 你甚至不用讀自帶的那一大堆文檔。你需要一個unix服務(wù)器上的賬戶;許多l(xiāng)inux變種和solaris 10都已經(jīng)試過了。你不需要root訪問,假設(shè)git,perl,和一個openssh兼容的ssh服務(wù)器已經(jīng)裝好了。在下面的例子里,我們會用git賬戶在gitserver進(jìn)行。
Gitolite是不同于“服務(wù)”的軟件 -- 其通過ssh訪問, 而且每個在服務(wù)器上的userid都是一個潛在的“gitolite主機”。我們在這里描述最簡單的安裝方法,對于其他方法,請參考其文檔。
開始,在你的服務(wù)器上創(chuàng)建一個名為git的用戶,然后以這個用戶登錄。從你的工作站拷貝你的SSH公鑰(也就是你用ssh-keygen默認(rèn)生成的~/.ssh/id_dsa.pub文件),重命名為.pub(我們這里使用scott.pub作為例子)。然后執(zhí)行下面的命令:
$ git clone git://github.com/sitaramc/gitolite
$ gitolite/install -ln
# assumes $HOME/bin exists and is in your $PATH
$ gitolite setup -pk $HOME/scott.pub
最后一個命令在服務(wù)器上創(chuàng)建了一個名為gitolite-admin的Git倉庫。
最后,回到你的工作站,執(zhí)行git clone git@gitserver:gitolite-admin。
然后你就完成了!Gitolite現(xiàn)在已經(jīng)安裝在了服務(wù)器上,在你的工作站上,你也有一個名為gitolite-admin的新倉庫。你可用通過更改這個倉庫以及推送到服務(wù)器上來管理你的Gitolite配置。
默認(rèn)快速安裝對大多數(shù)人都管用,還有一些定制安裝方法如果你用的上的話。一些設(shè)置可以通過編輯rc文件來簡單地改變,但是如果這個不夠,有關(guān)于定制Gitolite的文檔供參考。
安裝結(jié)束后,你切換到gitolite-admin倉庫(放在你的HOME目錄)然后看看都有啥:
$ cd ~/gitolite-admin/
$ ls
conf/ keydir/
$ find conf keydir -type f
conf/gitolite.conf
keydir/scott.pub
$ cat conf/gitolite.conf
repo gitolite-admin
RW+ = scott
repo testing
RW+ = @all
注意 "scott" ( 之前用gl-setup
命令時候的 pubkey 名稱) 有讀寫權(quán)限而且在 gitolite-admin
倉庫里有一個同名的公鑰文件。
添加用戶很簡單。為了添加一個名為alice的用戶,獲取她的公鑰,命名為alice.pub,然后放到在你工作站上的gitolite-admin克隆的keydir目錄。添加,提交,然后推送更改。這樣用戶就被添加了。
gitolite配置文件的語法在conf/example.conf
里,我們只會提到一些主要的。
你可以給用戶或者倉庫分組。分組名就像一些宏;定義的時候,無所謂他們是工程還是用戶;區(qū)別在于你使用“宏”的時候
@oss_repos = linux perl rakudo git gitolite
@secret_repos = fenestra pear
@admins = scott
@interns = ashok
@engineers = sitaram dilbert wally alice
@staff = @admins @engineers @interns
你可以控制許可在”ref“級別。在下面的例子里,實習(xí)生可以push ”int“分支。工程師可以push任何有"eng-"開頭的branch,還有refs/tags下面用"rc"開頭的后面跟數(shù)字的。而且管理員可以隨便更改(包括rewind)對任何參考名。
repo @oss_repos
RW int$ = @interns
RW eng- = @engineers
RW refs/tags/rc[0-9] = @engineers
RW+ = @admins
在RWorRW+之后的表達(dá)式是正則表達(dá)式(regex)對應(yīng)著后面的push用的參考名字(ref)。所以我們叫它”參考正則“(refex)!當(dāng)然,一個refex可以比這里表現(xiàn)的更強大,所以如果你對perl的正則表達(dá)式不熟的話就不要改過頭。
同樣,你可能猜到了,Gitolite字頭refs/heads/
是一個便捷句法如果參考正則沒有用refs/開頭。
一個這個配置文件語法的重要功能是,所有的倉庫的規(guī)則不需要在同一個位置。你能報所有普通的東西放在一起,就像上面的對所有oss_repos的規(guī)則那樣,然后建一個特殊的規(guī)則對后面的特殊案例,就像:
repo gitolite
RW+ = sitaram
那條規(guī)則剛剛加入規(guī)則集的 gitolite 倉庫.
這次你可能會想要知道訪問控制規(guī)則是如何應(yīng)用的,我們簡要介紹一下。
在gitolite里有兩級訪問控制。第一是在倉庫級別;如果你已經(jīng)讀或者寫訪問過了任何在倉庫里的參考,那么你已經(jīng)讀或者寫訪問倉庫了。
第二級,應(yīng)用只能寫訪問,通過在倉庫里的branch或者tag。用戶名如果嘗試過訪問 (W或+),參考名被更新為已知。訪問規(guī)則檢查是否出現(xiàn)在配置文件里,為這個聯(lián)合尋找匹配 (但是記得參考名是正則匹配的,不是字符串匹配的)。如果匹配被找到了,push就成功了。不匹配的訪問會被拒絕。
帶'拒絕'的高級訪問控制
目前,我們只看過了許可是R,RW, 或者RW+這樣子的。但是gitolite還允許另外一種許可:-,代表 ”拒絕“。這個給了你更多的能力,當(dāng)然也有一點復(fù)雜,因為不匹配并不是唯一的拒絕訪問的方法,因此規(guī)則的順序變得無關(guān)了!
這么說好了,在前面的情況中,我們想要工程師可以rewind任意branch除了master和integ。 這里是如何做到的
RW master integ = @engineers
- master integ = @engineers
RW+ = @engineers
你再一次簡單跟隨規(guī)則從上至下知道你找到一個匹配你的訪問模式的,或者拒絕。非rewind push到master或者integ 被第一條規(guī)則允許。一個rewind push到那些refs不匹配第一條規(guī)則,掉到第二條,因此被拒絕。任何push(rewind或非rewind)到參考或者其他master或者integ不會被前兩條規(guī)則匹配,即被第三條規(guī)則允許。
此外限制用戶push改變到哪條branch的,你也可以限制哪個文件他們可以碰的到。比如, 可能Makefile (或者其他哪些程序) 真的不能被任何人做任何改動,因為好多東西都靠著它呢,或者如果某些改變剛好不對就會崩潰。你可以告訴 gitolite:
repo foo
RW = @junior_devs @senior_devs
- VREF/NAME/Makefile = @junior_devs
這是一個強力的公能寫在 conf/example.conf里。
Gitolite也支持一個叫”個人分支“的功能 (或者叫, ”個人分支命名空間“) 在合作環(huán)境里非常有用。
在 git世界里許多代碼交換通過”pull“請求發(fā)生。然而在合作環(huán)境里,委任制的訪問是‘絕不’,一個開發(fā)者工作站不能認(rèn)證,你必須push到中心服務(wù)器并且叫其他人從那里pull。
這個通常會引起一些branch名稱簇變成像 VCS里一樣集中化,加上設(shè)置許可變成管理員的苦差事。
Gitolite讓你定義一個”個人的“或者”亂七八糟的”命名空間字首給每個開發(fā)人員(比如,refs/personal/<devname>/*
);看在doc/3-faq-tips-etc.mkd
里的"personal branches"
一段獲取細(xì)節(jié)。
Gitolite 允許你定義帶通配符的倉庫(其實還是perl正則式), 比如隨便整個例子的話assignments/s[0-9][0-9]/a[0-9][0-9]
。 這是一個非常有用的功能,需要通過設(shè)置$GL_WILDREPOS = 1;
在 rc文件中啟用。允許你安排一個新許可模式("C")允許用戶創(chuàng)建倉庫基于通配符,自動分配擁有權(quán)對特定用戶 - 創(chuàng)建者,允許他交出 R和 RW許可給其他合作用戶等等。這個功能在doc/4-wildcard-repositories.mkd
文檔里
我們用一些其他功能的例子結(jié)束這段討論,這些以及其他功能都在 "faqs, tips, etc" 和其他文檔里。
記錄: Gitolite 記錄所有成功的訪問。如果你太放松給了別人 rewind許可 (RW+) 和其他孩子弄沒了 "master", 記錄文件會救你的命,如果其他簡單快速的找到SHA都不管用。
訪問權(quán)報告: 另一個方便的功能是你嘗試用ssh連接到服務(wù)器的時候發(fā)生了什么。Gitolite告訴你哪個 repos你訪問過,那個訪問可能是什么。這里是例子:
hello scott, this is git@git running gitolite3 v3.01-18-g9609868 on git 1.7.4.4
R anu-wsd
R entrans
R W git-notes
R W gitolite
R W gitolite-admin
R indic_web_input
R shreelipi_converter
委托:真正的大安裝,你可以把責(zé)任委托給一組倉庫給不同的人然后讓他們獨立管理那些部分。這個減少了主管理者的負(fù)擔(dān),讓他瓶頸更小。這個功能在他自己的文檔目錄里的 doc/下面。
鏡像: Gitolite可以幫助你維護(hù)多個鏡像,如果主服務(wù)器掛掉的話在他們之間很容易切換。
更多建議: