UBUNTU上的GIT SERVER
Git是一個開源的版本控制系統,由Linus Torvalds主導,用於支援Linux核心開發。每一個Git工作目錄,都是一個完整的程式碼庫,包含所有的提交歷史。有能力跟蹤所有的程式碼版本,而不會去依賴於網路與中央伺服器。
安裝
Git可以通過以下的命令進行安裝
sudo apt-get install git
配置
每一個git的使用者,在第一次使用的時候都需要通過以下兩個命令,進行相應的配置
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
基本用法
假設使用者可以通過SSH的方式訪問Server,對於使用者想以分散式以及安全的方式使用Git,則已經完全足夠了。在伺服器端,建立一個新的倉庫。
git init --bare /path/to/repository
這會建立一個裸倉庫,它不允許我們直接編輯相應的檔案。如果你需要在伺服器端保留倉庫內容的複本,去掉 --bare 選項就好了。
任何具有SSH許可權的客戶端,均可以克隆相應的倉庫
git clone [email protected]:/path/to/repository
一旦克隆到了客戶端上,使用者即可編輯相應的檔案,然後提交得分享相應的程式碼:
cd /path/to/repository # 編輯修改 git commit -a # 提交所有修改到本地倉庫 git push origin master # 推送修改到伺服器端的倉庫
安裝 gitolite server
雖然以上的那些,對於建立,克隆和修改倉庫已經足夠。但使用者在伺服器端安裝git,最主要是想要一個傳統的原始碼控制管理伺服器,具有多使用者與許可權管理的功能。推薦的解決方案是通過以下命令,安裝 gitolite server:
sudo apt-get install gitolite
配置 gitolite
相比於大多數的類Unix系統,gitolite server的配置有一些小小的區別。傳統的配置檔案會存放在 /etc 的目錄之下,而gitolite則把自己的配置檔案放在一個git的倉庫之中。配置一個新的gitolite的第一步,則需要有配置倉庫的訪問許可權。
首先,讓我們為gitolite建立一個使用者,並具體其訪問許可權。
sudo adduser --system --shell /bin/bash --group --disabled-password --home /home/git git
現在我們想讓gitolite知曉倉庫管理員的SSH公鑰。我們假設當前使用者是倉庫的管理員。
cp ~/.ssh/id_rsa.pub /tmp/$(whoami).pub
我們切換到git使用者,並將管理員的公鑰匯入gitolite。
sudo su - git
gl-setup /tmp/*.pub
Gitolite會允許在安裝過程中,對配置檔案做一些初期的修改。你現在可以通過管理員使用者(即擁有管理員公鑰的帳戶),克隆和修改gitolite的配置倉庫。切回到管理員賬號,克隆配置倉庫:
exit
git clone [email protected]$IP_ADDRESS:gitolite-admin.git
cd gitolite-admin
gitolite-admin目錄包含兩個子目錄,conf 和 keydir。配置檔案存放在 conf目錄,而keydir目錄存放了使用者的公鑰資訊。
管理gitolite帳戶和倉庫
新增一個新的帳戶到gitolite很簡單:只需要獲取使用者的SSH公鑰資訊,以$DESIRED_USER_NAME.pub 的形式放在keydir目錄之下即可。值得注意的是,gitolite的使用者名稱不必和系統的使用者名稱相匹配,它們僅僅是用在gitolite的配置檔案之中,管理其訪問許可權的。同樣的,刪除使用者只需要刪除其對應的公鑰檔案即可。所有修改完畢之後,別忘了提交相應的修改,然後通過以下命令推回伺服器端:
git commit -a
git push origin master
倉庫是需要編輯conf/gitolite.conf檔案進行管理。通過空格分割,遵守相應的許可權規則,指定相應的倉庫即可。以下是一些預設的示例。
repo gitolite-admin
RW+ = admin
R = alice
repo project1
RW+ = alice
RW = bob
R = denise
使用伺服器
要使用新建立的帳戶,使用者需要gitolite的管理員將其公鑰匯入到gitolite的配置倉庫之中。然後,使用者即可擁有相應的專案許可權:
git clone [email protected]$SERVER_IP:$PROJECT_NAME.git
或者為一個已存在的git倉庫新增一個遠端地址:
git remote add gitolite [email protected]$SERVER_IP:$PROJECT_NAME.git
如此便搭好了一個簡易的,可用的git server。為了更好的檢視相應的程式碼,或者管理,也可使用相對較重的,gitlab開源專案。