GIT server build up
前幾天說的任務啟動了,雖然server還在採購流程中。但已經在一台PC機上搞起來,供小組自我裝載啦。在此把過程記錄下來吧:
硬體需求:一台linux電腦,在公司區域網路下有獨立IP,並且保證小組每個人都能ping通;
軟體需求:git-core, gitosis, openssh-server, openssh-client
安裝git和openssh:
$ sudo apt-get install git-core openssh-server openssh-client
新加使用者git,該使用者將作為所有代碼倉庫和使用者權限的管理者:
$ sudo useradd -m git
為git設定密碼:
$ sudo password git
建立一個git倉庫的儲存點,我放在了/opt/git下,並且讓出了git以外的使用者對此目錄無任何許可權:
$ mkdir /opt/git
$ sudo chow git:git /opt/git
$ sudo chmod 700 /opt/git
初始化一下伺服器的git使用者,這一步其實是為了安裝gitosis做準備,當然在任何一台機器上使用git,第一次必須要初始化一下,git向來不搞“知名不具”那一套:
$ git config --global user.name "name"
$ git config --global user.email "myemail"
安裝一下python的setup tool, 這個也是為了gitosis做準備:
$ apt-get install python-setuptools
獲得gitosis包:
$ cd /tmp
$ git clone git://eagain.net/gitosis.git
$ cd gitosis
$ sudo python setup.py install
切換到git使用者下:
---------------------------
$ su - git
預設狀態下,gitosis會將git倉庫放在git使用者的home下,所以我們做一個連結到/opt/git
$ ln -s /opt/git /home/git/repositories
$ exit
再次返回到預設使用者。
如果你將作為git伺服器的管理員,那麼在你的電腦上產生ssh公開金鑰:
$ ssh-keygen -t rsa
將公開金鑰拷貝到/tmp下,並給其他人以讀許可權:
$ cp ~/.ssh/id_rsa.pub /tmp && chmod a+r /tmp/id_rsa.pub
讓gitosis運行起來:
$ sudo -H -u git gitosis-init < /tmp/id_dsa.pub
Initialized empty Git repository in /opt/git/gitosis-admin.git/
Reinitialized existing Git repository in /opt/git/gitosis-admin.git/
gitosis的有趣之處在於,它通過一個git倉庫來管理設定檔,倉庫就放在了/opt/git/gitosis-admin.git。我們需要為一個檔案加上可執行許可權:
$sudo chmod 755 /opt/git/gitosis-admin.git/hooks/post-update
我們在伺服器上建立一個空的項目倉庫供大家測試一下,我建了一個叫“teamwork”的倉庫。
切換到git使用者:
$ su - git
$ cd /opt/git
$ mkdir teamwork.git
$ cd teamwork.git
$ git init --bare
在你自己的電腦裡,把gitosis-admin.git這個倉庫clone下來,這樣你就可以以管理員的身份修改配置了。
在你的電腦裡:
$ git clone git@git-server-ip:gitosis-admin.git
$ cd gitosis-admin
現在把你們team所有人的ssh公開金鑰檔案都拿來,按名字命名一下,比如kevin.pub, cindy.pub, peng.pub等,統統拷貝到keydir下:
$ cp ~/kevin.pub ~/cindy.pub ~/peng.pub keydir/
修改gitosis.conf檔案,我的配置大致如下:
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = volans
[group team]
writable = teamwork
members = volans kevin cindy
[group team_ro]
readonly = teamwork
members = peng
這個設定檔表達了如下含義:gitosis-admin群組成員有volans,該組對gitosis-admin倉庫有讀寫權限;team組有 volans, kevin, cindy三個成員,改組對teamwork倉庫有讀寫權限; team_ro組有peng一個成員,對teamwork倉庫有唯讀許可權。
當然目前這些設定檔的修改只是在你的本地,你必須推送到遠端gitserver上才能真正生效。
加入新檔案、提交並push到git伺服器:
$ git add .
$ git commit -am "add teamwork project and users"
$ git push origin master
好了,現在伺服器就搭建完了,並且有一個空的項目teamwork在伺服器上。接下來呢?當然是測試一下,空倉庫是不能clone的,所以需要某一個有寫入權限的人初始化一個版本。就我來做吧
$ cd
$ mkdir teamwork-ori
$ cd teamwork-ori
$ git init
$ echo "/*add what you want*/" > main.c
$ git add .
$ git commit -am "initial version"
$ git remote add oringin git@git-server-ip:teamwork.git
$ git push origin master
到此為止teamwork已經有了一個版本了,team的其他成員只要先clone一下teamwork倉庫,就可以任意玩兒了。
$ git clone git@git@git-server-ip:teamwork.git
另外:如果你有一個現成的git倉庫,想放到gitserver上供team使用(比如你clone了一個官方的kernel倉庫,想在內部使用它作為基礎倉庫),怎麼辦呢。
首先需要從你的工作倉庫中得到一個純倉庫, 比如你的工作目錄為~/kernel, 你想匯出純倉庫到你的優盤裡,然後拷貝到gitserver上去。
$ git clone --vare ~/kernel /media/udisk
然後就拿著優盤,交給gitserver的管理員,讓他拷貝到/opt/git/下,同時需要配置gitosis相關設定檔哦,這個就不用再說了吧。
-------------
配置Git伺服器的幾種方法
首先大家要明確Git是分布式的版本控制系統,實際上是不需要固定的伺服器的。簡單的配置只要把git項目的放在區域網路伺服器的共用資料夾就行。
1. Gitosis,在ubuntu上設定http://blog.agdunn.net/?p=277
2. gitolite:在ubuntu上設定http://realcnbs.com/2010/12/setup-git-server-gitolite-ubuntu/
3. webdav:配置方法:http://www.kernel.org/pub/software/scm/git/docs/howto/setup-git-server-over-http.txt
4. Git daemon 一個簡單的git庫管理服務軟體http://www.kernel.org/pub/software/scm/git/docs/git-daemon.html
5. 使用第三方服務repo.or.cz, Github或者gitorious
歡迎大家補充其他方法。
我自己是在amazon ec2上使用gitolite配置的服務,同時使用了Github和gitorious