搭建Git服務(wù)器

遠(yuǎn)程倉庫一節(jié)中,我們講了遠(yuǎn)程倉庫實(shí)際上和本地倉庫沒啥不同,純粹為了7x24小時(shí)開機(jī)并交換大家的修改。

GitHub就是一個(gè)免費(fèi)托管開源代碼的遠(yuǎn)程倉庫。但是對于某些視源代碼如生命的商業(yè)公司來說,既不想公開源代碼,又舍不得給GitHub交保護(hù)費(fèi),那就只能自己搭建一臺Git服務(wù)器作為私有倉庫使用。

搭建Git服務(wù)器需要準(zhǔn)備一臺運(yùn)行Linux的機(jī)器,強(qiáng)烈推薦用Ubuntu或Debian,這樣,通過幾條簡單的apt命令就可以完成安裝。

假設(shè)你已經(jīng)有sudo權(quán)限的用戶賬號,下面,正式開始安裝。

第一步,安裝git:

$ sudoapt-getinstall git

第二步,創(chuàng)建一個(gè)git用戶,用來運(yùn)行g(shù)it服務(wù):

$ sudoadduser git

第三步,創(chuàng)建證書登錄:

收集所有需要登錄的用戶的公鑰,就是他們自己的id_rsa.pub文件,把所有公鑰導(dǎo)入到/home/git/.ssh/authorized_keys文件里,一行一個(gè)。

第四步,初始化Git倉庫:

先選定一個(gè)目錄作為Git倉庫,假定是/srv/sample.git,在/srv目錄下輸入命令:

$ sudogit init --bare sample.git

Git就會創(chuàng)建一個(gè)裸倉庫,裸倉庫沒有工作區(qū),因?yàn)榉?wù)器上的Git倉庫純粹是為了共享,所以不讓用戶直接登錄到服務(wù)器上去改工作區(qū),并且服務(wù)器上的Git倉庫通常都以.git結(jié)尾。然后,把owner改為git:

$ sudochown -R git:git sample.git

第五步,禁用shell登錄:

出于安全考慮,第二步創(chuàng)建的git用戶不允許登錄shell,這可以通過編輯/etc/passwd文件完成。找到類似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改為:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

這樣,git用戶可以正常通過ssh使用git,但無法登錄shell,因?yàn)槲覀優(yōu)間it用戶指定的git-shell每次一登錄就自動(dòng)退出。

第六步,克隆遠(yuǎn)程倉庫:

現(xiàn)在,可以通過git clone命令克隆遠(yuǎn)程倉庫了,在各自的電腦上運(yùn)行:

$git clone git@server:/srv/sample.gitCloninginto'sample'...warning:Youappear to have cloned an empty repository.

剩下的推送就簡單了。

管理公鑰

如果團(tuán)隊(duì)很小,把每個(gè)人的公鑰收集起來放到服務(wù)器的/home/git/.ssh/authorized_keys文件里就是可行的。如果團(tuán)隊(duì)有幾百號人,就沒法這么玩了,這時(shí),可以用Gitosis來管理公鑰。

這里我們不介紹怎么玩Gitosis了,幾百號人的團(tuán)隊(duì)基本都在500強(qiáng)了,相信找個(gè)高水平的Linux管理員問題不大。

管理權(quán)限

有很多不但視源代碼如生命,而且視員工為竊賊的公司,會在版本控制系統(tǒng)里設(shè)置一套完善的權(quán)限控制,每個(gè)人是否有讀寫權(quán)限會精確到每個(gè)分支甚至每個(gè)目錄下。因?yàn)镚it是為Linux源代碼托管而開發(fā)的,所以Git也繼承了開源社區(qū)的精神,不支持權(quán)限控制。不過,因?yàn)镚it支持鉤子(hook),所以,可以在服務(wù)器端編寫一系列腳本來控制提交等操作,達(dá)到權(quán)限控制的目的。Gitolite就是這個(gè)工具。

這里我們也不介紹Gitolite了,不要把有限的生命浪費(fèi)到權(quán)限斗爭中。

小結(jié)

搭建Git服務(wù)器非常簡單,通常10分鐘即可完成;

要方便管理公鑰,用Gitosis;

要像SVN那樣變態(tài)地控制權(quán)限,用Gitolite。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容