鍍金池/ 教程/ Java/ 搭建 Git 服務(wù)器
操作標(biāo)簽
多人協(xié)作
解決沖突
Git 的誕生
工作區(qū)和暫存區(qū)
搭建 Git 服務(wù)器
Bug 分支
配置別名
從遠(yuǎn)程庫(kù)克隆
分支
添加遠(yuǎn)程庫(kù)
分支管理策略
撤銷修改
安裝 Git
管理修改
生成 SSH key
GitHub
倉(cāng)庫(kù)狀態(tài)
忽略特殊文件
刪除文件
Feature 分支
創(chuàng)建與合并分支
創(chuàng)建版本庫(kù)
創(chuàng)建標(biāo)簽
版本回退
集中式 vs 分布式

搭建 Git 服務(wù)器

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

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

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

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

第一步,安裝 git:

$ sudo apt-get install git

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

$ sudo adduser git

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

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

第四步,初始化 Git 倉(cāng)庫(kù):

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

$ sudo git init --bare sample.git

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

$ sudo chown -R git:git sample.git

第五步,禁用 shell 登錄:

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

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

改為:

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

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

第六步,克隆遠(yuǎn)程倉(cāng)庫(kù):

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

$ git clone git@server:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.

剩下的推送就簡(jiǎn)單了。

管理公鑰

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

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

管理權(quán)限

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

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

小結(jié)

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

  • 要方便管理公鑰,用 Gitosis;

  • 要像 SVN 那樣的控制權(quán)限,用 Gitolite。
上一篇:分支下一篇:創(chuàng)建與合并分支