前言
很早前就聽過GIT這個分散式的VCS,但是因為Subversion對我而言實在相當夠用,一直沒有想要更換的念頭,直到最近開始用了JRuby
才有了用用看的念頭,花了點時間確認GIT可以透過Apache走HTTP/HTTPS來checkin/checkout,而且Maven的SCM也支援GIT,
就開始了跟GIT奮戰的過程,我想至少花了4小時才確認這個GIT的Service是可用的。主要是因為不熟GIT的command,無法確認是否正
常。
安裝
(0)由於我已經有安裝了Apache2與Subversion,所以略過Apache2及DAV module的安裝,並且採用Subversion的帳號密碼檔
(1)安裝git-core curl
$>sudo apt-get install git-core curl
這時執行
$>git --version
應該會出現下到訊息,代表git應該可以用了
git version 1.5.6.3
再來是建立curl會用到帳密
$>touch ~/.netrc然後在.netrc中加入下列資料
machine localhost login youraccount #same with subversion password yourpassword #same with subversion
(2)建立GIT repository
$>sudo mkdir /var/lib/git #先建一個git root,再將其他repository放在其下 $>sudo mkdir /var/lib/git/repo1 $>cd /var/lib/git/repo1 $>sudo git --bare init $>sudo git-update-server-info $>sudo chmod +x hooks/post-update #在透過http commit後會自動執行git-update-server-info你會看到下列這樣的訊息,代表init成功
Initialized empty Git repository in /var/lib/git/repo1/
再設定權限,讓Apache2可以存取
$>sudo chown www-data:www-data -R /var/lib/git
(3)enable apache2 dav_fs, dav module
$>sudo a2enmod dav_fs $>sudo a2enmod dav因為我已經有裝Subversion,想說應該不用設定才是,後來發現只有起用dav這個module,而dav_fs沒起用,就是不行
所以還是記得要確認一下
(4)config git dav
建立Apache2用的GIT DAV設定
$>sudo touch /etc/apache2/mods-available/dav_git.conf $>sudo ln -s /etc/apache2/mods-available/dav_git.conf /etc/apache2/mods-enabled/dav_git.conf然後修改/etc/apache2/mods-available/dav_git.conf,將在第2個Step中加入的GIT Repository設為DAV,並指定
HTTP連結路徑為/git/repo1
Alias /git "/var/lib/git" <Location /git/repo1> DAV on AuthType Basic AuthName "Git Repository" AuthUserFile "/etc/apache2/dav_svn.passwd" Require valid-user </Location>
(5)restart apache2
$>sudo /etc/init.d/apache2 restart這時再用Browser連結http://localhost:8080/git/repo1/HEAD,輸入帳密後應該可以看見下列訊息
ref: refs/heads/master
(6)clone repo1
在任一空目錄下執行git clone
$>git clone http://localhost/git/repo1應該可以看到
Initialized empty Git repository in /yourpath/repo1/.git/
warning: You appear to have cloned an empty repository.
(7)test commit
$>touch readme $>git add readme $>git commit -m "first" [master (root-commit) 29db40b] first 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 readme
$>git push origin master Fetching remote heads... refs/ refs/heads/ refs/tags/ updating 'refs/heads/master' from 0000000000000000000000000000000000000000 to 29db40b949a69400ea4377c28703b6073c91d785 sending 3 objects done Updating remote server info
沒有留言:
張貼留言