最近看到git的介紹,剛好自己又想在公司電腦和家里電腦之間同步一些文件湖苞,于是便開始學習git了烹吵。
不過要想實現(xiàn)多臺電腦的同步就必須要有一個git服務器碉熄,雖然有github,但那是開源的肋拔,自己有些東西還是不適合公開锈津。私有的倉庫要需要收費,對于現(xiàn)階段的我來說還是沒有必要專門去租一個私有倉庫的凉蜂。
剛好想到自己之前那臺聯(lián)想筆記本一直放在家里沒用琼梆,于是就想用其搭建一個git服務器。由于Windows對于git的兼容性并不好窿吩,所以首先將系統(tǒng)給換成了Ubuntu的茎杂,然后再在上面搭建git服務器。
在搭建的過程中遇到了好多坑纫雁,都是一個一個踩過來的煌往,也幸虧網(wǎng)上有很多前輩記錄的文章自己才能搭好。所以轧邪,我也將我搭建的過程記錄下來刽脖,一方面,怕自己以后忘了忌愚;另一方面曲管,如果能對后學者提供參考那就更好了。
一硕糊、安裝git服務器所需軟件
安裝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é)議來在服務器與客戶端之間傳輸文件,安裝命令如下:
sudo apt-get install openssh-server openssh-client
安裝python
由于安裝gitosis需要用到Python的一些工具勺远,所以需要先安裝setup,安裝命令如下:
sudo apt-get install python-setuptools
初始化服務器的git用戶信息
安裝gitosis之前需要初始化服務器的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服務器的管理員碟刺,可以管理其他用戶的項目權限锁保。命令為:
sudo useradd -m gitmanager
sudo passwd gitmanager
創(chuàng)建倉庫存儲點
在/home目錄下創(chuàng)建一個項目倉庫存儲點,命令為:
sudo mkdir /home/gitrepository
權限設置
設置只有git用戶擁有所有權限半沽,其他用戶沒有任何權限爽柒,命令為:
sudo chown gitmanager:gitmanager /home/gitrepository/
sudo chmod 700 /home/gitrepository/
創(chuàng)建鏈接映射
由于gitosis默認狀態(tài)下會將倉庫放在用戶的repositories目錄下,例如gitmanager用戶的倉庫地址默認在
/home/gitmanager/repositories/目錄下者填,這里我們需要創(chuàng)建一個鏈接映射浩村。讓他指向我們前面創(chuàng)建的專門用于存放項目的倉庫目錄/home/gitrepository。
命令如下:
sudo ln -s /home/gitrepository /home/gitmanager/repository
生成公鑰
在管理機器(你主要使用的電腦)上生成一個ssh的公鑰占哟,命令如下:
ssh-keygen -t rsa
拷貝公鑰文件到服務器
將公鑰文件拷貝到服務器上心墅,命令如下:
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(傳到服務器的地址)
三、在服務器上創(chuàng)建項目倉庫
創(chuàng)建倉庫
使用gitmanager賬戶在服務器上創(chuàng)建一個目錄(mytestproject.git)并初始化成git項目倉庫榨乎。命令如下:
su gitmanager
cd /home/gitrepository
mkdir mytestproject.git
git init --bare
exit
SSh驗證
使用初始化 Gitosis 公鑰的擁有者身份 SSH 進服務器怎燥,命令如下:
ssh gitmanager@192.168.0.23
克隆Gitosis的控制倉庫到本地
命令為:
git clone gitmanager@192.168.0.23:/home/gitmanager/repositories/gitosis-admin.git
gitosis-admin目錄結構
- gitosis.conf
用來設置用戶、倉庫和權限的控制文件
- keydir
保存所有具有訪問權限用戶公鑰的地方每人一個
多人協(xié)助開發(fā)同一個版本
將他們每個人的公鑰文件添加到keydir文件夾然后push到服務端蜜暑。文件的命名將決定在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具有讀寫權限:
[group mobile]
writable = iphone_project
members = scott john josie jessica
權限控制
Gitosis 也具有簡單的訪問控制功能。如果想讓 John 只有讀權限,可以這樣做:
[group mobile]
writable = iphone_project
members = scott josie jessica
[group mobile_ro]
readonly = iphone_project
members = john
現(xiàn)在 John 可以克隆和獲取更新,但 Gitosis 不會允許他向項目推送任何內容史煎。
四谦屑、常見問題
運行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