W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
現(xiàn)在我們將討論如何在你自己的服務(wù)器上搭建 Git 服務(wù)來(lái)運(yùn)行這些協(xié)議。
這里我們將要演示在 Linux 服務(wù)器上進(jìn)行一次基本且簡(jiǎn)化的安裝所需的命令與步驟,當(dāng)然在 Mac 或 Windows 服務(wù)器上同樣可以運(yùn)行這些服務(wù)。事實(shí)上,在你的計(jì)算機(jī)基礎(chǔ)架構(gòu)中建立一個(gè)生產(chǎn)環(huán)境服務(wù)器,將不可避免的使用到不同的安全措施與操作系統(tǒng)工具。但是,希望你能從本節(jié)中獲得一些必要的知識(shí)。
在開(kāi)始架設(shè) Git 服務(wù)器前,需要把現(xiàn)有倉(cāng)庫(kù)導(dǎo)出為裸倉(cāng)庫(kù)——即一個(gè)不包含當(dāng)前工作目錄的倉(cāng)庫(kù)。這通常是很簡(jiǎn)單的。為了通過(guò)克隆你的倉(cāng)庫(kù)來(lái)創(chuàng)建一個(gè)新的裸倉(cāng)庫(kù),你需要在克隆命令后加上 --bare
選項(xiàng)按照慣例,裸倉(cāng)庫(kù)目錄名以 .git 結(jié)尾,就像這樣:
$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.
現(xiàn)在,你的 my_project.git
目錄中應(yīng)該有 Git 目錄的副本了。
整體上效果大致相當(dāng)于
$ cp -Rf my_project/.git my_project.git
雖然在配置文件中有若干不同,但是對(duì)于你的目的來(lái)說(shuō),這兩種方式都是一樣的。它只取出 Git 倉(cāng)庫(kù)自身,不要工作目錄,然后特別為它單獨(dú)創(chuàng)建一個(gè)目錄。
既然你有了裸倉(cāng)庫(kù)的副本,剩下要做的就是把裸倉(cāng)庫(kù)放到服務(wù)器上并設(shè)置你的協(xié)議。假設(shè)一個(gè)域名為 git.example.com
的服務(wù)器已經(jīng)架設(shè)好,并可以通過(guò) SSH 連接,你想把所有的 Git 倉(cāng)庫(kù)放在 /opt/git
目錄下。假設(shè)服務(wù)器上存在 /opt/git/
目錄,你可以通過(guò)以下命令復(fù)制你的裸倉(cāng)庫(kù)來(lái)創(chuàng)建一個(gè)新倉(cāng)庫(kù):
$ scp -r my_project.git user@git.example.com:/opt/git
此時(shí),其他通過(guò) SSH 連接這臺(tái)服務(wù)器并對(duì) /opt/git
目錄擁有可讀權(quán)限的使用者,通過(guò)運(yùn)行以下命令就可以克隆你的倉(cāng)庫(kù)。
$ git clone user@git.example.com:/opt/git/my_project.git
如果一個(gè)用戶,通過(guò)使用 SSH 連接到一個(gè)服務(wù)器,并且其對(duì) /opt/git/my_project.git
目錄擁有可寫權(quán)限,那么他將自動(dòng)擁有推送權(quán)限。
如果到該項(xiàng)目目錄中運(yùn)行 git init
命令,并加上 --shared
選項(xiàng),那么 Git 會(huì)自動(dòng)修改該倉(cāng)庫(kù)目錄的組權(quán)限為可寫。
$ ssh user@git.example.com
$ cd /opt/git/my_project.git
$ git init --bare --shared
由此可見(jiàn),根據(jù)現(xiàn)有的 Git 倉(cāng)庫(kù)創(chuàng)建一個(gè)裸倉(cāng)庫(kù),然后把它放上你和協(xié)作者都有 SSH 訪問(wèn)權(quán)的服務(wù)器是多么容易。現(xiàn)在你們已經(jīng)準(zhǔn)備好在同一項(xiàng)目上展開(kāi)合作了。
值得注意的是,這的確是架設(shè)一個(gè)幾個(gè)人擁有連接權(quán)的 Git 服務(wù)的全部——只要在服務(wù)器上加入可以用 SSH 登錄的帳號(hào),然后把裸倉(cāng)庫(kù)放在大家都有讀寫權(quán)限的地方。你已經(jīng)準(zhǔn)備好了一切,無(wú)需更多。
下面的幾節(jié)中,你會(huì)了解如何擴(kuò)展到更復(fù)雜的設(shè)定。這些內(nèi)容包含如何避免為每一個(gè)用戶建立一個(gè)賬戶,給倉(cāng)庫(kù)添加公共讀取權(quán)限,架設(shè)網(wǎng)頁(yè)界面等等。然而,請(qǐng)記住這一點(diǎn),如果只是和幾個(gè)人在一個(gè)私有項(xiàng)目上合作的話,僅僅 是一個(gè) SSH 服務(wù)器和裸倉(cāng)庫(kù)就足夠了。
如果設(shè)備較少或者你只想在小型開(kāi)發(fā)團(tuán)隊(duì)里嘗試 Git ,那么一切都很簡(jiǎn)單。架設(shè) Git 服務(wù)最復(fù)雜的地方在于用戶管理。如果需要倉(cāng)庫(kù)對(duì)特定的用戶可讀,而給另一部分用戶讀寫權(quán)限,那么訪問(wèn)和許可安排就會(huì)比較困難。
如果你有一臺(tái)所有開(kāi)發(fā)者都可以用 SSH 連接的服務(wù)器,架設(shè)你的第一個(gè)倉(cāng)庫(kù)就十分簡(jiǎn)單了,因?yàn)槟銕缀跏裁炊疾挥米觯ㄕ缥覀兩弦还?jié)所說(shuō)的)。如果你想在你的倉(cāng)庫(kù)上設(shè)置更復(fù)雜的訪問(wèn)控制權(quán)限,只要使用服務(wù)器操作系統(tǒng)的普通的文件系統(tǒng)權(quán)限就行了。
如果需要團(tuán)隊(duì)里的每個(gè)人都對(duì)倉(cāng)庫(kù)有寫權(quán)限,又不能給每個(gè)人在服務(wù)器上建立賬戶,那么提供 SSH 連接就是唯一的選擇了。我們假設(shè)用來(lái)共享倉(cāng)庫(kù)的服務(wù)器已經(jīng)安裝了 SSH 服務(wù),而且你通過(guò)它訪問(wèn)服務(wù)器。
有幾個(gè)方法可以使你給團(tuán)隊(duì)每個(gè)成員提供訪問(wèn)權(quán)。第一個(gè)就是給團(tuán)隊(duì)里的每個(gè)人創(chuàng)建賬號(hào),這種方法很直接但也很麻煩?;蛟S你不會(huì)想要為每個(gè)人運(yùn)行一次 adduser
并且設(shè)置臨時(shí)密碼。
第二個(gè)辦法是在主機(jī)上建立一個(gè) git 賬戶,讓每個(gè)需要寫權(quán)限的人發(fā)送一個(gè) SSH 公鑰,然后將其加入 git 賬戶的 ~/.ssh/authorized_keys
文件。這樣一來(lái),所有人都將通過(guò) git 賬戶訪問(wèn)主機(jī)。這一點(diǎn)也不會(huì)影響提交的數(shù)據(jù)——訪問(wèn)主機(jī)用的身份不會(huì)影響提交對(duì)象的提交者信息。
另一個(gè)辦法是讓 SSH 服務(wù)器通過(guò)某個(gè) LDAP 服務(wù),或者其他已經(jīng)設(shè)定好的集中授權(quán)機(jī)制,來(lái)進(jìn)行授權(quán)。只要每個(gè)用戶可以獲得主機(jī)的 shell 訪問(wèn)權(quán)限,任何 SSH 授權(quán)機(jī)制你都可視為是有效的。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: