最近看到git的介紹,剛好自己又想在公司電腦和家里電腦之間同步一些文件,于是便開始學(xué)習(xí)git了。
不過要想實現(xiàn)多臺電腦的同步就必須要有一個git服務(wù)器,雖然有g(shù)ithub,但那是開源的,自己有些東西還是不適合公開。私有的倉庫要需要收費,對于現(xiàn)階段的我來說還是沒有必要專門去租一個私有倉庫的。
剛好想到自己之前那臺聯(lián)想筆記本一直放在家里沒用,于是就想用其搭建一個git服務(wù)器。由于Windows對于git的兼容性并不好,所以首先將系統(tǒng)給換成了Ubuntu的,然后再在上面搭建git服務(wù)器。
在搭建的過程中遇到了好多坑,都是一個一個踩過來的,也幸虧網(wǎng)上有很多前輩記錄的文章自己才能搭好。所以,我也將我搭建的過程記錄下來,一方面,怕自己以后忘了;另一方面,如果能對后學(xué)者提供參考那就更好了。
一、安裝git服務(wù)器所需軟件
安裝git-core
git-core是git版本控制核心軟件,安裝命令如下:
sudo apt-get install git-core
若安裝提示失敗,可能是因為系統(tǒng)軟件庫的檢索文件太舊了,需要先更新一下,更新命令如下:
sudo apt-get update
安裝openssh-server和openssh-client
openssh-server和openssh-client用于git通過ssh協(xié)議來在服務(wù)器與客戶端之間傳輸文件,安裝命令如下:
sudo apt-get install openssh-server openssh-client
安裝python
由于安裝gitosis需要用到Python的一些工具,所以需要先安裝setup,安裝命令如下:
sudo apt-get install python-setuptools
初始化服務(wù)器的git用戶信息
安裝gitosis之前需要初始化服務(wù)器的git用戶信息,初始化命令如下:
git config --global user.name "penn"
git config --global nser.email "penn@example.com"
獲取gitosis版本文件
這個就類似于我們下載安裝包,命令如下:
git clone https://github.com/res0nat0r/gitosis.git
安裝gitosis
進入文件目錄
cd gitosis/
安裝gitosis
這里需要使用python命令安裝目睹下的setup.py的python腳本進行安裝,命令如下:
sudo python setup.py install
到這里整個安裝步驟就完成了,下面是對git進行一些基本配置。
二、創(chuàng)建git管理員賬戶、配置git
創(chuàng)建管理員賬戶
創(chuàng)建一個賬戶(gitmanager)作為git服務(wù)器的管理員,可以管理其他用戶的項目權(quán)限。命令為:
sudo useradd -m gitmanager
sudo passwd gitmanager
創(chuàng)建倉庫存儲點
在/home目錄下創(chuàng)建一個項目倉庫存儲點,命令為:
sudo mkdir /home/gitrepository
權(quán)限設(shè)置
設(shè)置只有g(shù)it用戶擁有所有權(quán)限,其他用戶沒有任何權(quán)限,命令為:
sudo chown gitmanager:gitmanager /home/gitrepository/
sudo chmod 700 /home/gitrepository/
創(chuàng)建鏈接映射
由于gitosis默認(rèn)狀態(tài)下會將倉庫放在用戶的repositories目錄下,例如gitmanager用戶的倉庫地址默認(rèn)在
/home/gitmanager/repositories/目錄下,這里我們需要創(chuàng)建一個鏈接映射。讓他指向我們前面創(chuàng)建的專門用于存放項目的倉庫目錄/home/gitrepository。
命令如下:
sudo ln -s /home/gitrepository /home/gitmanager/repository
生成公鑰
在管理機器(你主要使用的電腦)上生成一個ssh的公鑰,命令如下:
ssh-keygen -t rsa
拷貝公鑰文件到服務(wù)器
將公鑰文件拷貝到服務(wù)器上,命令如下:
scp /home/penn/.ssh/id_rsa.pub gitmanager@192.168.0.23:/home/gitmanager/id_rse.pub
初始化gitosis
注意:初始化之前需要切換至gitmanager用戶
su gitmanager
gitosis-init < home/gitmanager/id_rsa.pub(傳到服務(wù)器的地址)
三、在服務(wù)器上創(chuàng)建項目倉庫
創(chuàng)建倉庫
使用gitmanager賬戶在服務(wù)器上創(chuàng)建一個目錄(mytestproject.git)并初始化成git項目倉庫。命令如下:
su gitmanager
cd /home/gitrepository
mkdir mytestproject.git
git init --bare
exit
SSh驗證
使用初始化 Gitosis 公鑰的擁有者身份 SSH 進服務(wù)器,命令如下:
ssh gitmanager@192.168.0.23
克隆Gitosis的控制倉庫到本地
命令為:
git clone gitmanager@192.168.0.23:/home/gitmanager/repositories/gitosis-admin.git
gitosis-admin目錄結(jié)構(gòu)
- gitosis.conf
用來設(shè)置用戶、倉庫和權(quán)限的控制文件
- keydir
保存所有具有訪問權(quán)限用戶公鑰的地方每人一個
多人協(xié)助開發(fā)同一個版本
將他們每個人的公鑰文件添加到keydir文件夾然后push到服務(wù)端。文件的命名將決定在gitosis.conf配置文件中的稱呼。
添加協(xié)同成員示例
1.為 John,Josie 和 Jessica 添加公鑰:
$ cp /tmp/id_rsa.john.pub keydir/john.pub
$ cp /tmp/id_rsa.josie.pub keydir/josie.pub
$ cp /tmp/id_rsa.jessica.pub keydir/jessica.pub
2.把他們都加進 ‘mobile’ 團隊,讓他們對iphone_project具有讀寫權(quán)限:
[group mobile]
writable = iphone_project
members = scott john josie jessica
權(quán)限控制
Gitosis 也具有簡單的訪問控制功能。如果想讓 John 只有讀權(quán)限,可以這樣做:
[group mobile]
writable = iphone_project
members = scott josie jessica
[group mobile_ro]
readonly = iphone_project
members = john
現(xiàn)在 John 可以克隆和獲取更新,但 Gitosis 不會允許他向項目推送任何內(nèi)容。
四、常見問題
運行ssh git@192.168.0.23出錯
重啟電腦
ERROR:gitosis.serve.main:Repository read access denied
原因
gitosis.conf中的members與keydir中的用戶名不一致,如gitosis中的members = foo@bar,但keydir中的公密名卻叫foo.pub
解決方法
使keydir的名稱與gitosis中members所指的名稱一致。 改為members = foo 或 公密名稱改為foo@bar.pub
lone時報does not appear to be a git repository
原因
clone時不能用絕對路徑,只能寫相對于gitmanager用戶home的相對路徑。
我用的路徑是:git clone gitmanager@192.168.0.6:gitosis-admin.git
解決方案
將路徑改為:相對gitmanager用戶的路徑:
git clone gitmanager@192.168.0.23:/home/gitmanager/repositories/gitosis-admin.git