




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Gitolite構(gòu)建Git服務(wù)SSHoSSHoSSHGitolite Gitolite的安裝/ SSH gitolite-admin 版本庫(kù) Gitolite機(jī) 對(duì) 對(duì) GitoliteGitoliteGitwebGitdaemon如果不是要和他人協(xié)同開(kāi)發(fā),Git根本就不需要架設(shè)服務(wù)器。Git在本地可以直接使用本地版本庫(kù)的路徑完成git版本庫(kù)間的操作。Gitosis,否否否否否否否否SSH協(xié)議和基于SSH的Gitolite等可以通過(guò)空口令帳號(hào)實(shí)現(xiàn)SSH協(xié)SSH協(xié)議用于為Git提供讀寫(xiě)操作,是寫(xiě)操作的標(biāo)準(zhǔn)服務(wù),在智能HTTP協(xié)議出對(duì)于擁有 權(quán)限的SSH登錄帳號(hào),可以直接用下面的git命令,例如$gitclone<username><server>/path/to/repo.git是服務(wù)器中版本庫(kù)的絕對(duì)路徑。若用相對(duì)路徑則相對(duì)于 HTTPSURL中同時(shí)給出登錄名和口SSHGit其一是用標(biāo)準(zhǔn)的ssh帳號(hào)版本庫(kù)。即用戶帳號(hào)可以直接登錄到服務(wù)器,獲得 另外的方式是,所有用戶都使用同一個(gè)的SSH帳號(hào)版本庫(kù)。各個(gè)用戶通過(guò)公鑰認(rèn)GitosisGitolite就是實(shí)現(xiàn)該方式的兩個(gè)服務(wù)器軟件。標(biāo)準(zhǔn)SSH帳號(hào)和SSH帳號(hào)的區(qū)別在于:s是否差好是否否SSH,也可以用公鑰認(rèn)證的方式實(shí)現(xiàn)所有用戶共用同一個(gè)帳號(hào)。不過(guò)這類(lèi)似管理員收集需要git服務(wù)的用戶公鑰。如:user1.pub,user2.pub使用ssh-copy-id命令將各個(gè)git用戶的公鑰加入服務(wù)器(server)的公鑰認(rèn)證列表中$ssh-copy-id-iuser1.pub$ssh-copy-id-iuser2.pub$cat/path/to/user1.pub>>$cat/path/to/user2.pub>>在服務(wù)器端的anonymous用戶主 下建立git庫(kù),就可以實(shí)現(xiàn)多個(gè)用戶利用同一個(gè)系統(tǒng)帳號(hào)(git)Git服務(wù)了。這樣做除了免除了逐一設(shè)置帳號(hào),以及用戶無(wú)需口令認(rèn)證之外,標(biāo)準(zhǔn)SSHGit服務(wù)的SSHGitosisGitolite服務(wù)器軟件SSHcryptography。 下不存在.ssh ,說(shuō)明你的SSH公鑰/私鑰對(duì)尚未創(chuàng)建??梢杂眠@個(gè)命$ssh- 下創(chuàng)建 $ssh-copy-id-i.ssh/id_rsa.pubuserserverSSH當(dāng)此命令執(zhí)行成功后,再以u(píng)ser用戶登錄server主機(jī)時(shí),不令直接該命令實(shí)際上將.ssh/id_rsa.pub公鑰文件追加到主機(jī)server的user主下的.ssh/authorized_keys文件中。SSH
git帳號(hào),執(zhí)行g(shù)it命令$ssh-keygen-f<filename>會(huì)在 下創(chuàng)建指定的公鑰/私鑰對(duì)。文件<filename>是私鑰,文<filename>.pubserverssh登錄指令,用到的是那$ssh~/.ssh/id_rsa.pubserverSSH~/.ssh/config可以通過(guò)創(chuàng)建主機(jī)別名,在連接主機(jī)時(shí),使用特定的公鑰。例如~/.ssh/config文件中的下列配置:hostusergitport22$ssh$gitclone登錄的SSH主機(jī) git~/.ssh/jiangxin.pubGitolite服務(wù)架GitolitePerlGit服務(wù)管理工具,通過(guò)公鑰對(duì)用戶進(jìn)行認(rèn)證,并能夠通過(guò)配置文件對(duì)寫(xiě)操作進(jìn)行基于分支和路徑的的精細(xì)。Gitolite采用的是SSH協(xié)議并且SSHSSH非常熟悉,無(wú)論是管理員還是普通用戶。因此在開(kāi)始之前,請(qǐng)確認(rèn)已經(jīng)通讀過(guò)之前的“SSH協(xié)議”一章。Gitolite的是: /sitaramc/gitolite。從提交日志里可以看出作者是SitaramChamarty,最早的提交開(kāi)始于2009年8月。作者是受到了Gitosis的啟發(fā),開(kāi)發(fā)了這款功能更為強(qiáng)大和易于安裝的軟件。Gitolite名,作者的原意是Gitosis和lite的組合,不過(guò)因?yàn)镚itolite的功能越來(lái)越強(qiáng)大,已經(jīng)了Gitosis,因此作者笑稱(chēng)Gitolite可以看作是-lite——輕量級(jí)的。我是在2010年8Gitolite這個(gè)項(xiàng)目,并嘗試將公司基于Gitosis的管理系統(tǒng)遷移至對(duì)創(chuàng)建者的,版本庫(kù)名稱(chēng)映射等。本文關(guān)于Gitolite的介紹也是基于我改進(jìn)的GitosisGitoliteGitolite的實(shí)現(xiàn)機(jī)制概括如下:Gitolite安裝在服務(wù)器server)gitgitgitolite-admin管理員將git用戶的公鑰保存在gitolite-admin庫(kù)的 下,并編輯gitolite-adminPUSHgitolite-為gitolite的一條命 mand jiangxin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-ptyssh-rsa<公鑰內(nèi)容來(lái)自于jiangxin.pub...>更新服務(wù)器端的文件~/.gitolite/conf/gitolite.conf編譯文件~/.gitolite/conf piled.pm。用戶可以用git命令的版本庫(kù)。當(dāng)用戶以git用戶登錄ssh服務(wù)時(shí),因?yàn)楣€認(rèn)證的相關(guān)設(shè)置,不再直接進(jìn)入s 而是打印服務(wù)器端git庫(kù)信息后馬上退出。即用戶不會(huì)通過(guò)git用戶進(jìn)入服務(wù)器的s 安裝帳號(hào)為git,管理員的ID為admin。Gitolitegit1.6.2SSH服務(wù)。下面是Gitolite的安裝過(guò)程。服務(wù)器端創(chuàng)建帳安裝Gitolite,首先要在服務(wù)器端創(chuàng)建帳號(hào),所有用戶都通過(guò)此帳號(hào)Git庫(kù)。一般為方便易記,選擇git作為帳號(hào)名稱(chēng)。$sudoadduser--system-- 有的系統(tǒng),只允許特定的用戶組(ssh用戶組)SSH協(xié)議登錄,這就需要將新建的git用戶添加到ssh用戶組中。$sudoaddusergitgitgitgit的口令,只$sudopasswd $ssh-copy-idGitolite的安裝/升GitoliteGitolite的前git管理員能夠以git用戶通過(guò)公鑰認(rèn)證,無(wú)口令方式登錄方式登錄服務(wù)器。使用gitGitolite的源代碼$git 進(jìn)入 $cd$./gl-easy-installgitserver命令gl-easy-install的第一個(gè)參數(shù)git是服務(wù)器上創(chuàng)建的帳號(hào)ID,第二個(gè)參數(shù)youare tov1.5.4-22-Note:getting'(unknown)'forthe'from'versionshouldonlyhappenGetting'(unknown)'forthe'to'versionmeansyouareprobablyinstallingfromatarfiledump,notarealclone.Thisisnotanerrorbutit'snicetohavethoseversionnumbersincaseyouneedsupport.Tryandinstallfromaadmin的私鑰/gl-easy-install命令行的最后一個(gè)參數(shù)即用于設(shè)定管理員IDadminthenextcommandwillcreateanewkeypairforyourgitoliteThepubkeywillbe/home/jiangxin/.ssh/admin.pub.Youwillhavetochooseapassphraseorhitenterfornone. mendnothavingapassphrasefornow,*especially*ifyoudonothaveapassphraseforthekeywhichyouarealreadyusingtogetserveraccess!Addoneusing'ssh-keygen-p'afterallthesetupisdoneandyou'vesuccessfullyclonedandpushedthegitolite-adminrepo.Afterthat,install'keychain'orsomethingsimilar,andaddthefollowingcommandtoyourbashrc(sincethisisanon-defaultkey)ssh-addThismakesusingpassphrasesveryIMPORTANT:oncetheinstallcompletes,*this*keycannolongerbeusedtogetacommandlineontheserver--itwillbeusedbygitolite,forgitaccess Ifthatisaproblem,pleaseABORTdoc/6-ssh-troubleshooting.mkdwillexplainwhatishappeninghere,ifyouneedmoreinfo..ssh/config即當(dāng)主機(jī)gitolite時(shí),會(huì)自動(dòng)用名為admin.pub的公鑰,以git用戶,連接服務(wù)creatingsettingsforyourgitoliteaccessin/home/jiangxin/.ssh/config;thesearethelinesthatwillbeappendedtoyour~/.ssh/config:hostusergitport100%100%2325100%1572 100% thegitolitercfileneedstobeeditedbyhand.Thedefaultsaresensible,soifyouwish,youcanjustexittheeditor.Otherwise,makeanychangesyouwishandsaveit. Readthecommentstounderstandwhatiswhat--thercfile'sationisinline.Pleaserememberthisfilewillactuallybecopiedtotheserver,andthatthepathsetc.representpathsonthe自動(dòng)打開(kāi)編輯器(vi).gitolite.rc文件,編輯結(jié)束,上傳到服務(wù)器。用于設(shè)置Git服務(wù)器的根 ,缺省是Git用戶主 下的repositories 絕對(duì)路徑。所有Git庫(kù)都將部署在該 $REPO_UMASK=0007;#getsyou'rwxrwx---perlvi":q"(不帶引關(guān)于SSH主機(jī)別在安裝過(guò)程中,gitolite創(chuàng)建了名為admin的公鑰/私鑰對(duì),以名為admin.pub的公鑰連接gitolite提供服務(wù)。但是如果直接連接服務(wù)器,使用的是缺省的公鑰,會(huì)直接進(jìn)入s。別忘了我們面介紹過(guò)的SSH主機(jī)別名。實(shí)際上剛剛在安裝gitolite的時(shí)候,就已經(jīng)自~/.ssh/config文件,可以看到類(lèi)似內(nèi)容,如果對(duì)主機(jī)hostuserport22像下面這樣輸入SSH命令,會(huì)直接進(jìn)入 $ssh$ssh其他的安裝方法 首先也要在服務(wù)器端先創(chuàng)建一個(gè)的帳號(hào),如:git$sudoadduser--system-- $scp~/.ssh/id_rsa.pub Gitolite的改進(jìn)。使用gitGitolite的源代碼$git 進(jìn)入 $cdDebian/Ubuntu$sudoaptitudeinstallRedhatyum 例如服務(wù)器端的帳號(hào)為git。$sudosu-$gl-setup gitolite-adminGitolite~/.gitolite.rc管理員克隆gitolite-admin管理當(dāng)gitolite安裝完成后,在服務(wù)器端自動(dòng)創(chuàng)建了一個(gè)用于gitolite自身管理的git庫(kù)gitolite-admin.gitgitolite-admin.git庫(kù)。別忘了使用SSHInitializedemptyGitrepositoryin/data/tmp/gitolite-admin/.git/remote:Countingobjects:6,done.remote:Compressingobjects:100%(4/4),done.remote:Total6(delta0),reused0(delta0)Receivingobjects:100%(6/6),done.$ls- $lsconf$lskeydir/我們可以看出gitolite- conf/和keydir/keydir/admin.pubkeydiramdinconf/gitolite.conf#pleaseseeconf/example.conffordetailsonsyntaxand =repo =增加新用戶增加新用戶,就是允許新用戶能夠通過(guò)其公鑰Git服務(wù)。只要將新用戶的公鑰添加gitolite-admin版本庫(kù)的 username@host.pubusername@pub的公鑰指向同一個(gè)用戶username。Gitolite也支持郵件地址格式的公鑰,即形如 .pub的公鑰。Gitolite能管理員進(jìn)入gitolite-admin本地克隆版本庫(kù)中,新用戶公鑰到 $cp/path/to/dev1.pub$cp/path/to/dev2.pubgitadd$gitadd$git#Onbranch#Changestobe (use"gitresetHEAD<file>..."to##new#new#new#$gitcommit-m"adduser:jiangxin,dev1,dev2"[masterbd81884]adduser:jiangxin,dev1,dev23fileschanged,3insertions(+),0deletions(-)createmode100644keydir/dev1.pubcreatemode100644keydir/dev2.pub$gitCountingobjects:8,Deltacompressionusingupto2threads.Compressingobjects:100%(6/6),done.Writingobjects:100%(6/6),1.38KiB,done.Total6(delta0),reused0(delta0)remote:Alreadyon'master' thefollowingusers(pubkeyfilesinparens)donotappearintheconfigfile:remote:dev1(dev1.pub),dev2(dev2.pub),jiangxin(jiangxin.pub)#gitolite admin的 <dev1的公 <dev2的公 jiangxin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty用戶jiangxin的公#gitolitegitpushremotepost-update鉤子更改新用戶添加完畢,可能需要重新進(jìn)行。更改的方法也非常簡(jiǎn)單,即修conf/gitolite.confpushgitolite-adminconf/gitolite.conf$vi@team1=dev1dev2gitdiff我們還修改了版本庫(kù)testing的,將@all用戶組改為我們新建立的@team1用戶組$gitindex6c5fdf8..f983a84100644---@@-1,10+1,12@@#pleaseseeconf/example.conffordetailsonsyntaxand+@team1=dev1dev2+ =repo = =$gitadd$gitcommit-q-m"newteam@team1authforrepo執(zhí)行g(shù)itpush,同步到服務(wù)器,才真正完成文件的編輯。我們可以注意到,PUSH后的輸出中沒(méi)有了警告。$gitCountingobjects:7,Deltacompressionusingupto2threads.Compressingobjects:100%(3/3),done.Writingobjects:100%(4/4),398bytes,done.Total4(delta1),reused0(delta0)remote:AlreadyonTogitadmin.bj:gitolite-admin.git master->masterGitolite詳文件的基本語(yǔ)法 @admin=jiangxinwangsheng 6repo7C=8=9repo==== 第1@adminjiangxinwangsheng第6行,通過(guò)正則表達(dá)式定義了一組版本庫(kù),即在ossxp/ 第7行,用戶組@admin中的用戶,可以在ossxp/ 第8行,所有用戶都可以讀寫(xiě)ossxp 第9行開(kāi)始,定義的testing版本庫(kù)使用了語(yǔ)法。第13juniopu開(kāi)頭的分支。第14行,用戶pasky可以讀寫(xiě)cogito分支。(僅此分支,精確匹配。定義用戶組和版本庫(kù)組在conf/gitolite.conf文件中,可以定義用戶組或者版本庫(kù)組。組名稱(chēng)以@字符開(kāi)頭,@admin=jiangxin@staff=@admin@engineers版本(ACLrepo =jiangxin =@dev =每一個(gè)版本庫(kù)都以一條repo指令開(kāi)始.git.git通配符版本^$。這一點(diǎn)和后面repo"myrepo.Gitolite誤myrepo..git的版本庫(kù)。解決歧義的一個(gè)辦法是:在正則表達(dá)式的前面插入^符號(hào),或者在表達(dá)式后面添加$符號(hào),形如:在repo指令之后,是縮進(jìn)的一條或者多條指令。指令的語(yǔ)法 [零個(gè)或多個(gè)正則表達(dá)式匹配的]=<user>[<user>(refex如果在指令中省略正則,意味著對(duì)全部的Git(分支,里程碑等)都有效。正則如果不以refs/開(kāi)頭,會(huì)自動(dòng)添加refs/heads/作為前綴。正則如果不以$結(jié)尾,意味著后面可以匹配任意字符,相當(dāng)于添加.*$作為后綴。權(quán)限后面也可以包含一個(gè)以NAME/開(kāi)頭的路徑列表,進(jìn)行基于路徑的。CC代表創(chuàng)建。僅在通配符版本庫(kù)時(shí)可以使用。用于指定誰(shuí)可以創(chuàng)建和通配符匹配的RRW,R為只讀。RW為讀寫(xiě)權(quán)限。RW+rewind只有當(dāng)指令中定義了正則(正則表達(dá)式定義的分支、里程碑等,才可以使用該授權(quán)指令。其中C的含義是允許創(chuàng)建和正則匹配的(分支或里程碑等。只有當(dāng)指令中定義了正則(正則表達(dá)式定義的分支、里程碑等,才可以使用該授權(quán)指令。其中D的含義是允許刪除和正則匹配的(分支或里程碑等。只有當(dāng)指令中定義了正則(正則表達(dá)式定義的分支、里程碑等,才可以使用該授權(quán)指令。其中C的含義是允許創(chuàng)建和正則匹配的(分支或里程碑等),D的含義Gitolite機(jī)SSH觸發(fā)的 mand命令執(zhí)行的檢查。包括:RRWRW+,則整個(gè)版本庫(kù)包含限之一:RW,RW+或者C。僅對(duì)正則表達(dá)式定義的通配符版本庫(kù)有效。即擁有C的用戶,可以創(chuàng)建和對(duì)應(yīng)正則表因?yàn)榘姹編?kù)的讀操作不執(zhí)行update鉤子,所以讀操作只在的第一個(gè)階段(鉤子update針對(duì)PUSH操作的各個(gè)分支進(jìn)行逐一檢查,因此第二個(gè)階段可以在這個(gè)階段也可以獲取到要更新的新的和老的ref的SHA,因此也可以進(jìn)行對(duì)整個(gè)版本庫(kù)進(jìn)行@admin= =dev1dev2badboy repoR=-=RW=@devRW+=test1第6test1@test具有只讀權(quán)限。第8test1用戶具有讀寫(xiě)Gitolite的實(shí)現(xiàn)是讀權(quán)限和寫(xiě)權(quán)限分別進(jìn)行判斷并匯總(并集test1用戶具有讀寫(xiě)權(quán)jiangxin對(duì)版本庫(kù)具有寫(xiě)的權(quán)限,并能強(qiáng)制PUSH。第9行指令中的加號(hào)(+)含義是允許強(qiáng)制PUSH。badboy只對(duì)寫(xiě)操作起作用,不會(huì)對(duì)badboy用戶的讀權(quán)限施加影響。導(dǎo)致badboy只有讀操作權(quán)限,而沒(méi)有寫(xiě)操作。通配符版本庫(kù)的 =dev1dev2 repoC=R=-=RW=@dev$Gitolite這個(gè)版因?yàn)榧犹?hào)+既可以作為普通字符出現(xiàn)在版本庫(kù)名中,又可以作為正則表達(dá)式中特殊含義的字符,如果Gitolite將文件中的通配符版本庫(kù)誤判為普通版本庫(kù),就會(huì)自動(dòng)在服我修改了Gitolite的代碼,能正確判斷部分正則表達(dá)式,但是最好還是對(duì)簡(jiǎn)單的正則表達(dá)式添加^作為前綴,或者添加$作為后綴,避免誤判。Gitolite原來(lái)對(duì)通配符版本庫(kù)的實(shí)現(xiàn)是克隆即創(chuàng)建,但是這樣很容易因?yàn)殇浫脲e(cuò)誤導(dǎo)致錯(cuò)誤的版本庫(kù)意外被創(chuàng)建。群英匯改進(jìn)的Gitolite需要通過(guò)PUSH創(chuàng)建版本庫(kù)。以admin用戶的創(chuàng)建版本庫(kù)sandbox/repos1.git用戶admin對(duì)版本庫(kù)具有寫(xiě)的權(quán)限。由admin用戶創(chuàng)建的,創(chuàng)建者具有對(duì)版本庫(kù)完全的讀寫(xiě)權(quán)限。 自動(dòng)生成的gl-creator文件記錄了創(chuàng)建者ID為admin。用戶jiangxin對(duì)版本庫(kù)沒(méi)有讀寫(xiě)權(quán)限。雖然用戶jiangxin和用戶admin一樣都可以在sandbox/下創(chuàng)建版本庫(kù),但是由于sandbox/repos1.gitjiangxinjiangxin用戶沒(méi)有任何權(quán)test1用戶自己的版本庫(kù)空間 @administrators=jiangxinadminrepoC=R=>/設(shè)置管理員組對(duì)任何用戶在users/ 用戶可以使用setperms為自己的版本庫(kù)進(jìn)行二次$sshdev1@serversetpermsusers/dev1/repos1.gitR=dev2RW=setperms^D(Ctrl+D)結(jié)束編輯。也可以使用輸入重定向,先將寫(xiě)入文件,再用setperms命令加載。$cat>perms<<EOFR=dev2RW=jiangxin$sshdev1@serversetperms<getperms$sshdev1@servergetpermsusers/dev1/repos1.gitR=dev2RW=對(duì)的:傳統(tǒng)模傳統(tǒng)的,指的是指令中不包含RWC,RWD,RWCD,RW+C,RW+D,RW+CD授權(quán)關(guān)鍵字,只采用RW,RW+的傳統(tǒng)關(guān)鍵字。rewind必須擁有+的創(chuàng)建必須擁有W的刪除必須擁有+的 repoRW+= =第5行,版本庫(kù)test/repo1,管理員組用戶jiangxin和admin可以任意創(chuàng)建和刪除,并且可以強(qiáng)制PUSH。第6行的規(guī)則看似只對(duì)master和refs/heads/feature/*的,實(shí)際上@dev可以所有名字空間的。這是因?yàn)椴僮鳠o(wú)法獲得ref相關(guān)內(nèi)容。@devmasterfeature/開(kāi)頭的分支進(jìn)行寫(xiě)操作,但不能強(qiáng)制PUSH和刪除。至于其他分支和里程碑,則只能讀不能寫(xiě)。至于用戶組@test的用戶,因?yàn)槭褂昧薘指令,所以不涉及到分支的寫(xiě)對(duì)的:擴(kuò)展模RWCRWDRWCDRW+CRW+DRW+CDrewind必須擁有+的創(chuàng)建必須擁有C的刪除必須擁有D的。repoRW+C=@administrators =@dev =repoRW+CD= =test/repo2.git用戶組@administrators中的用戶,具有創(chuàng)建和刪除的權(quán)限,并且能強(qiáng)用戶組@dev中的用戶,不能創(chuàng)建,但可以刪除,以及可以強(qiáng)制PUSH用戶組@test中的用戶,可以PUSH到任何,但是不能創(chuàng)建,不能刪除,也不能強(qiáng)制PUSH。test/repo3.git用戶組@administrators中的用戶,具有創(chuàng)建和刪除的權(quán)限,并且能強(qiáng)用戶組@dev中的用戶,可以創(chuàng)建,并能夠強(qiáng)制PUSH,但不能刪除用戶組@test中的用戶,可以PUSH到任何,但是不能創(chuàng)建,不能刪除,也不能強(qiáng)制PUSH。對(duì)的:禁用規(guī)則的使 repo dev1dev2 jiangxindev1dev2jiangxinv用戶dev1,dev2@others組,只能寫(xiě)除了以v加上數(shù)字開(kāi)頭之外的其他里程其中以-開(kāi)頭的指令建立禁用規(guī)則。禁用規(guī)則只在的第二階段有效,因此用戶分支和創(chuàng)建用戶空間(使用了CREATOR關(guān)鍵字)的版本庫(kù)類(lèi)似,還可以在一個(gè)版本庫(kù)內(nèi),允許管理自己名字空間(USER關(guān)鍵字)下的分支。在正則的參數(shù)中出現(xiàn)的USER關(guān)鍵字會(huì)被替換為用戶的ID。repoRW+CD=RW+CDrefs/al/USER/=@all master=@dev用戶組@administrators中的用戶,對(duì)所有具有創(chuàng)建和刪除的權(quán)限,并且能強(qiáng)制PUSH。。。
@devmaster分支具有讀寫(xiě)和強(qiáng)制更新的權(quán)限,但是不能刪對(duì)路徑的寫(xiě)Gitolite也實(shí)現(xiàn)了對(duì)路徑的寫(xiě)操作的精細(xì),并且非常巧妙的是:在實(shí)現(xiàn)上增加的代碼可以忽略不計(jì)。這是因?yàn)镚itolite把對(duì)路徑當(dāng)作是特殊格式的的。在文件中,如果一個(gè)版本庫(kù)的指令中的正則字段出現(xiàn)了以NAME/開(kāi)頭的引repo RW RW 第2行,初級(jí)程序員@junior_devs和高級(jí)程序員@senior_devs可以對(duì)版本庫(kù)第4@senior_devs對(duì)所有文件(NAME/)第5行和第6行,設(shè)定初級(jí)程序員@junior_devs對(duì)除了根 的Makefile文件外的其他文件,具有寫(xiě)權(quán)限。Gitolite的版本庫(kù)位于安裝用戶主下的repositories git,則版本庫(kù)都創(chuàng)建在/home/git/repositories之下??梢酝ㄟ^(guò)配置文件.gitolite.rc修有多種創(chuàng)建版本庫(kù)的方式。一種是在文件中用repo指令設(shè)置版本庫(kù)(未使用正則表達(dá)式的版本庫(kù))的,當(dāng)對(duì)gitolite-admin版本庫(kù)執(zhí)行g(shù)itpush操作,自動(dòng)在服務(wù)端創(chuàng)建新被的用戶在創(chuàng)建后PUSH到服務(wù)器上完成創(chuàng)建。注意,在文件中創(chuàng)建的版本庫(kù)名稱(chēng)不要帶.git后綴,在創(chuàng)建版本庫(kù)過(guò)程中會(huì)自動(dòng)在版本庫(kù)后面追加.git后綴。在配置文件中出現(xiàn)的版本庫(kù),即時(shí)生成repo =然后將文件的修改提交并PUSH到服務(wù)器,我們會(huì)看到文件中添加新的版本庫(kù)testing2被自動(dòng)創(chuàng)建。$gitCountingobjects:7,Deltacompressionusingupto2threads.Compressingobjects:100%(3/3),done.Writingobjects:100%(4/4),375bytes,done.Total4(delta1),reused0(delta0)remote:Alreadyon'master'remote:creatingremote:InitializedemptyGitrepositoryin/home/git/repositories/testing2.git/Togitadmin.bj:gitolite-admin.git master->remotetesting2.git此外使用版本庫(kù)組的語(yǔ)法(即用@創(chuàng)建的組,用作版本庫(kù),也會(huì)被自動(dòng)創(chuàng)建。例如下面的文件片段設(shè)定了一個(gè)包含兩個(gè)版本庫(kù)的組@testing,當(dāng)將新配置文件PUSH到服務(wù)器上的時(shí)候,會(huì)自動(dòng)創(chuàng)建testing3.git和testing4.git。@testing=testing3repo =通配符版本庫(kù),管理員通過(guò)push創(chuàng)建一組版本庫(kù)。首先要想使用通配符版本庫(kù),需要在服務(wù)器端安裝用戶(如git).gitolite.rc介紹的那樣,不會(huì)在文件PUSH到服務(wù)器時(shí)創(chuàng)建,而是擁有版本庫(kù)創(chuàng)建(C)的C指令指定能夠創(chuàng)建此版本庫(kù)的管理員(擁有創(chuàng)建版本庫(kù)repo = =dev1管理員jinagxin"ossxp/.+"dev1和使用該方法創(chuàng)建版本庫(kù)后,創(chuàng)建者的uid將被記錄在版本庫(kù)下的gl-creator文件中。該帳號(hào)具有對(duì)該版本庫(kù)最高的權(quán)限。該通配符版本庫(kù)的指令中如果出現(xiàn)CREATOR將被創(chuàng)建者的uid替換。$mkdir$cd$git使用gitremote指令添加的$gitremoteaddorigingitpush$gitpushoriginGitoliteclone操作時(shí),自動(dòng)創(chuàng)建。但是我認(rèn)為這不是一個(gè)好的實(shí)踐,會(huì)經(jīng)常因?yàn)閏lone的URL寫(xiě)錯(cuò),導(dǎo)致在服務(wù)器端創(chuàng)建版本庫(kù)。因此我重新改造了gitolite通配符版本庫(kù)創(chuàng)建的實(shí)現(xiàn),改為在對(duì)版本庫(kù)進(jìn)行PUSH的時(shí)候進(jìn)行創(chuàng)建,而clone一個(gè)不存在的版本庫(kù),會(huì)報(bào)錯(cuò)退出。直接在服務(wù)器端創(chuàng)建當(dāng)版本庫(kù)的數(shù)量很多的時(shí)候,在服務(wù)器端直接通過(guò)git命令創(chuàng)建或者通過(guò)創(chuàng)建可能會(huì)更方便。但是要注意,在服務(wù)器端手工創(chuàng)建的版本庫(kù)和Gitolite創(chuàng)建的版本庫(kù)最大的不同在于鉤子。如果不能為手工創(chuàng)建的版本庫(kù)正確設(shè)定版本庫(kù)的鉤子,會(huì)導(dǎo)致失去一些Gitolite特有的功能。例如:失去分支的功能。一個(gè)由Gitolite創(chuàng)建的版本庫(kù),hooks下有三個(gè)鉤子實(shí)際上到gitolite安裝目gitolite-hooked-> post-receive.mirrorpush->/home/git/. update->/home/git/. 有,就是重新執(zhí)行一遍gitolite的安裝,會(huì)自動(dòng)更新版本庫(kù)的鉤子。安裝過(guò)程一路按回$cd$./gl-easy-installgitserver GitoliteGitolite進(jìn)行擴(kuò)展和改進(jìn),涉及到的內(nèi)容主要包括:原來(lái)的實(shí)現(xiàn)是克隆即創(chuàng)建(克隆者需要被授予C的權(quán)限。同時(shí)還要通過(guò)另外的語(yǔ)句為用戶設(shè)置RW權(quán)限,否則創(chuàng)建者沒(méi)有讀和寫(xiě)權(quán)限。PUSH創(chuàng)建版本庫(kù)(PUSHC權(quán)限RW等權(quán)限,創(chuàng)建者自動(dòng)具有對(duì)版本庫(kù)最高的。的正則表達(dá)式前或后添加^或$字符,而不會(huì)造成文件編輯錯(cuò)誤。redmine-0.9.x.git,redmine-1.0.x.git,...redmine項(xiàng)目越來(lái)越復(fù)雜,可能就需要將其放在子下進(jìn)行管理,例如放到ossxp/redmine/下。只需要在Gitolite的文件中添加下面一行map語(yǔ)句,就可以實(shí)現(xiàn)版本庫(kù)名稱(chēng)重定向。map(redmine.*)=Gitolite版本庫(kù)鏡像Git版本庫(kù)的使用者很少(每個(gè)庫(kù)可能只有一個(gè)用戶Git版本庫(kù)采用集中式的應(yīng)用模型,需要建立雙機(jī)熱備(以便在故障出現(xiàn)時(shí),實(shí)現(xiàn)~/.gitolite.rc$ENV{GL_SLAVES}設(shè)置鏡像服務(wù)~/.gitolite.rc$GL_SLAVE_MODE設(shè)置從服務(wù)器post-receive鉤子,一旦有提交,即時(shí)同步到鏡像GitGitolitepost-receive 下,名稱(chēng)為post-receive.mirrorpush,要將其改名為post-receive。否則版本庫(kù)的post-receive不能生效。 :gl-mirror-s過(guò)SSH登錄到從服務(wù)器,執(zhí)行創(chuàng)建命令。因此需要通過(guò)一個(gè)特殊的S,能夠同時(shí)支持Gitolite的以及S 環(huán)境。這個(gè)特殊的S 就是gl-mirror-s。而且這個(gè)S,通過(guò)特殊的環(huán)境變量繞過(guò)服務(wù)器的權(quán)限檢查,避免因?yàn)閱?wèn)題導(dǎo)致同步在Gitolite不同的安裝模式下,gl-mirror-s的安裝位置可能不同。下面令用于在服務(wù)器端設(shè)置其他服務(wù)器時(shí)使用這個(gè)特殊的S。foobar和bazbar.pub#在服務(wù)器foo上執(zhí)行:$exportGL_ADMINDIR=`cd$HOME;perl-e'do".gitolite.rc";print$catbar.pubbaz.pub ",'>>#foo上執(zhí)行$catbar.pubbaz.pub在foo服務(wù)器上設(shè)置完畢,可以從服務(wù)器bar或者baz上執(zhí)行:$sshgit@foo$sshgit@foo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣州國(guó)際旅游服務(wù)合同樣本
- 商鋪?zhàn)赓U合同樣本:門(mén)面租賃全新范本
- 寒假臨時(shí)工雇傭合同書(shū)樣本
- 游戲品牌代言合同樣本
- 長(zhǎng)租公寓租賃合同全文
- 新媒體廣告推廣合同模板
- 辦公室簡(jiǎn)單裝修合同范本
- 個(gè)人貸款合同電子版模板
- 企業(yè)間的戰(zhàn)略合作框架合同范本
- 課件人物插圖小學(xué)生
- 培訓(xùn)中的基本學(xué)習(xí)原理-課件
- 現(xiàn)代文閱讀《有聲電影》答案詳細(xì)解析
- 銷(xiāo)售合同模板英文銷(xiāo)售合同模板
- 大學(xué)計(jì)算機(jī)基礎(chǔ)(Windows10+Office2016)PPT完整全套教學(xué)課件
- 精素材:描寫(xiě)植物的好詞好句好段
- 【高中語(yǔ)文】《登岳陽(yáng)樓》課件17張+統(tǒng)編版高中語(yǔ)文必修下冊(cè)
- 華師大版八年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)教案
- 四下語(yǔ)文學(xué)情分析-2
- 家園合作培養(yǎng)幼兒勞動(dòng)行為習(xí)慣的行動(dòng)研究
- 中國(guó)的能源安全 課件
- 鄭州市某路雨水污水改造工程施工組織設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論