不過本著學習理由,今天花了半天去自建,最後結果可說是半失敗,得出來的Git Server是可Clone,不可Push。
不知道是什麼原因,整個過程我遇到非常多問題,上網Search亦是很多人都有的問題。
我的軟件版本是:
- Windows 7 32Bit & Windows 2008 Server 64Bit
- Apache 2.2.21
- Git-1.8.0-preview20121022 安裝版本 (安裝路徑 : C:\git\,注意下列寫的都以此為根本。 )
- TortoiseGit-1.7.15.0-64bit (Windows Server 2008用)
- Eclipse 4.2.1 + EGIT (Windows 7 作Client用)
詳細方法就不在此寫,因為網上太多教學,但就節錄安裝過程的問題和解決方法。
1. Error : git-upload-pack not permitted
遇到這個問題,原因是"C:\git\libexec\git-core"目錄中欠缺 libiconv-2.dll,不知道是版本問題還是什麼,很多教學文章都是寫libiconv2.dll (沒有"-"的),我在這個問題困擾很久都是因為看過幾個教學都是寫
而在"C:\git\bin"目錄下又的確有libiconv-2.dll和libiconv2.dll,只差一個"-",很容易混淆。
解決方法 :
由"C:\git\bin"複製至"C:\git\libexec\git-core"的是libiconv-2.dll,只需要它就可以,libiconv2.dll不用的。
之後你可以Double Click "C:\git\libexec\git-core\git-http-backend.exe"看看,如果是閃一閃關閉則是正常,出現錯誤訊息就代表失敗。
2. Error: The requested URL returned error: 403 while accessing http://www.MyGitRepo.com/refs?service=git-receive-pack fatal: HTTP request failed
出現403就幾乎多數是Apache的Access Right問題。
有幾個地方都有可能引發上述問題:
ScriptAliasMatch
很多文章都會教你設定httpd.conf的ScriptAliasMatch,大多數網上找到的例子都是:
ScriptAliasMatch \ "(?x)^/(.*/(HEAD | \ info/refs | \ objects/(info/[^/]+ | \ [0-9a-f]{2}/[0-9a-f]{38} | \ pack/pack-[0-9a-f]{40}.(pack|idx)) | \ git-(upload|receive)-pack))$" \ "C:/git/libexec/git-core/git-http-backend.exe/$1"
如果你是使用Xampp或者Apache預設的htdocs做web root,照著Copy & Paste應該問題不大。
但若果你跟我都是使用Virtual Host的話,就要修改成
ScriptAliasMatch \ "(?x)^/192.168.1.13:9000/(.*/(HEAD | \ info/refs | \ objects/(info/[^/]+ | \ [0-9a-f]{2}/[0-9a-f]{38} | \ pack/pack-[0-9a-f]{40}.(pack|idx)) | \ git-(upload|receive)-pack))$" \ "C:/git/libexec/git-core/git-http-backend.exe/$1"第2行增加的是你Virtual Host的ServerName。
而Apache的<location />Directive ,需要從httpd.conf抽離至httpd-vhosts.conf的<virtualhost />之中。
例如
<VirtualHost 192.168.1.13:9000> ServerName 192.168.1.13:9000 DocumentRoot "D:/VirtualHost/GitRepo" <Directory "D:/VirtualHost/GitRepo"> Options FollowSymLinks AllowOverride None Order deny,allow Allow from all </Directory> <Location "/"> AuthType Basic AuthName "GIT Repository" AuthUserFile "D:/VirtualHost/GitRepo/htpasswd" Require valid-user </Location> </VirtualHost>
3. Error : git-upload-pack / git-receive-pack: command not found
要解決這個Error有兩個方法 :
1. 使用Git Bash
分別輸入以下command,然後試試
git config remote.origin.uploadpack /path/to/git-upload-pack git config remote.origin.receivepack /path/to/git-receive-pack git update-server-info
2.加入Git的Path至環境變數
在Windows的系統 > 環境變數 > Path項目中加入Git的路徑 : C:\git\bin 和 C:\git\libexec\git-core,重新開機試試。
我自己用(1)的方法不行,我用(2)就成功。
4. Error : Cannot access URL http://xxx/, return code 22 fatal: git-http-push failed
這就是我解決不到的問題,上網找方法,很多人都說要用Apache的WebDAV才可以Push動作,但其實不應該的。
Git官方都有說自1.6.6版本開始有一個叫Smart HTTP的東西是可以不用WebDAV而做到Push動作的,但可惜我始終都搞不到,而網上找遍整個Google都沒有可行的方法,所以被迫放棄了。
情況跟這位網友一樣 - GIT over HTTP (GIT HTTP Transparent)
但我可以說,網上的教學質素很參差,照足去做亦未必一定成功。
當中我認為比較好的,可以參考:
.Net 托管實現的Git平臺可以選擇使用Git Candy了,功能比Bonobo更強大,速度更快、更穩定!
回覆刪除歡迎您的使用!
源碼在:http://github.com/Aimeast/GitCandy
演示在:http://git.53wb.com
Bonobo到GitCandy數據庫轉換程序:http://git.53wb.com/Repository/Tree/Bonobo2Candy/