跳到主要內容

簡單設定GIT http server (for Windows and Unix),Git Http Server for Dummies

在Windows上設定

原本在Windows上因為中文檔名一直有問題,不敢使用Git,看到Git Source Control Provider再試中文檔名仍然不行;後來雨蒼告知有對岸的高手tinyfish對msysgit做patch,並放在Googlecode上utf8-git-on-windows,事情才有轉機。

原本也有考慮Mercurial,Windows上中文檔名雖然也有問題但是有方法修復,未採用的原因是Windows平台沒有Visual Studio provider。而且Xcode己經內建Git整合,為了自己方便當然採用Git才是明智之舉。(個人覺得Google Code採用水銀有點是基於對Python的偏執,
難保爾後不會有Git支援XD
。Update: 2011/07 Google Code支援Git了!)。關於Google的看法,詳見Analysis of Git and Mercurial

首先當然是要安裝 patch過的git和TortoiseGit,接著下載Apache for Windows,我是下載 httpd-2.2.19-win32-x86-openssl-0.9.8r.msi安裝。
使用網路上最常見的這篇教學仍然失敗,加上REMOTE_USER設定還是不行,只要是用到git-http-backend.exe的檔案都出現403 Forbidden,例如HEAD、info\refs等,檔案權限已經設成everyone full access仍然有問題;後來回頭用舊方法WebDAV才搞定。

除了原本需要的alias_module、auth_basic_module、authn_file_module,還要啟用dav_module、dav_fs_module、dav_lock_module。我是沿用原來的http.conf,另外加上 extra/git.conf,在原來的http.conf最後加上
Include conf/extra/git.conf
如果要Include conf/extra/httpd-dav.conf的方式啟用WebDAV要注意httpd-dav.conf裏的DavLockDB必須要寫入權限的檔案,所以預設的目錄通常不是不存在就是無法寫入。還有預設的upload目錄AuthType等等,要看是否有啟用。所以我並沒有Include,而是簡單地加入一行
DavLockDB "C:/TEMP/DavLock.txt"

git.conf的內容如下:
<directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</directory>
ALIAS /git "C:/GitRepository"
<Location /git>
AuthType Basic
Dav on
AuthName "GIT Repository"
AuthUserFile "C:/Apache2.2/權限檔"
Require valid-user
</Location>

在Linux上設定

若是在Ubuntu則是WebDAV與cgi方式都可正常執行。
Ubuntu在 /etc/apache2/sites-available/加上 git.conf ,同樣在預設的
/etc/apache2/sites-enabled 做link
/etc/apache2/sites-enabled$ sudo ln -s /etc/apache2/sites-available/git.conf .
git.conf內容如下:
Alias /git /var/cache/git

<Directory "/var/cache/git">
Allow from all
</Directory>

<LocationMatch "/git">
Dav on
AuthType Basic
AuthName "Git"
AuthUserFile "/etc/apache2/權限檔"
Require valid-user
</LocationMatch>
別忘了 htpasswd -c 權限檔 帳號

Server端
cd C:\GitRepository 或 cd /var/cache/git
git --bare init project.git
cd project.git
git update-server-info

Client端
git config --global user.name "你的名字"
git config --global user.email "你的email"
git config --global color.ui true
git config --global http.sslVerify off
git config --global core.autocrlf false

cd "要放的目錄"
git clone http://你的帳號@你的伺服器/git/project.git/
cd project #Git很聰明,會自己忽略.git
#加上你的程式檔
git add
#我是加上 git add 嬑堃.txt
git commit -m "註解" #我是 git commit "堃嬑" ,此時就看得出patch過版本和Unix版本git同樣方便
#此時只有在local端加入
#接下來要傳回Server
git push -u origin master
#會出現兩次問passwd,這是用WebDAV的缺點,個人覺得還好
#之後要上傳只要打git push

備註:
話雖如此,我在將Subversion的Repository倒入Git Repository時,Windows版發生不明錯誤掛點,但是Unix版(FreeBSD/Linux)都沒事,所以請盡可能使用Unix版架Git Server,若覺得以上都太麻煩或是遇到奇怪的錯誤,就用github或是bitbucket吧!

參考資料: GIT官方網站Git 初學筆記 ihower介紹GIT的幾篇文章

留言

shoting寫道…
你好
Google Code採用Mercurial不至於是對python的偏執,記得有篇Google Code當初比較hg與git的文章,主要還是win32跟http的優劣,在那個時間點(2009) git在這兩項的確是比不上hg。
鳥毅寫道…
shoting,我也看過Analysis of Git and Mercurial,只是個人感覺啦~我已經修改原文以避免誤導:P
zoearthmoon寫道…
大大您好
我是第一次接觸git這軟體
目前是想先用
phpfog這網站去測試
但是無論怎麼clone都是錯誤
例如 Permission denied (publickey)
或 bad file number...
另外是這軟體要執行更新動作時
可以用很多通信方式
但是有沒有最簡單的通訊方式可以推薦的呢?
感謝您的回答!!
鳥毅寫道…
zoearthmoon:

  我大便很通暢,所以不要再叫我大大。

  GIT和我不熟,我只會基本操作;這篇也只是架repository的筆記呀~

  你第一次用git就挑戰我沒用過的phofog,我怎麼可能知道問題出在哪裡呢?建議你先從參考資料的 Git 初學筆記ihower介紹GIT的幾篇文章入手。
鳥毅寫道…
zoearthmoon:
  補充說明一下,Permission denied (publickey) 這種錯誤應該是沒有設定好public key,類似 Github 設定 public key,但你要自己看原網站設定,別人沒用過不可能幫你試。

  git在Windows環境中文永遠有問題,選擇git你只能不要用中文/utf8檔名,或是使用unix like OS。

這個網誌中的熱門文章

自然人憑證讀卡機驅動程式

鳥毅用的是第一代的自然人憑證讀卡機,EZ100PU(後來有同事買EZmini可以讀SIM卡似乎更好),每年報稅時用一次。 本來只是要申請些政府業務,一時之間找不到光碟,沒想到在 驅動程式下載 居然看到Linux和Mac的驅動程式,剩下的就是政府單位的網頁和程式應該改版了吧!!!

DBeaver 介面語言

DBeaver是我個人頗常用的一套跨平台Database管理工具,最近升級後發現Windows版本居然變成簡體中文,而且無法切換為英文。

如何將較高版本SQL Server複製到低版本SQL Server (降級為舊版)並保留權限及資料庫圖表

一般若是要將SQL Server裡的Database轉往其他Server時,最簡單的方式就是備份(Backup)後再還原(Restore),或者是䣃離(detach)後附加(attach)。 但是很不幸地,若是由較低版本(e.g. 2008)到較高版本(e.g. 2012)要怎麼辦呢?