Git Server on Windows 安裝手記
- 用戶端和伺服器端的作業系統都是 Windows。
- 用戶端要能透過 HTTP 的方式存取版本庫。
- 無論是取出檔案還是送交檔案,都需要驗證身分(輸入帳號密碼)。
更新
- 2012-04-04 :安裝畫面使用 v1.7.9 Preview 的畫面截圖,此版本仍然無法處理中文檔名。
Step 1: 安裝 Git for Windows
在 Windows 環境使用 Git,可以用 msysgit (Git for Windows),我安裝的版本是 v1.7.9 Preview 的版本(Git-1.7.9-preview20120201.exe)。下面幾張圖片是安裝過程的畫面截圖。
裝好之後,程式集裡面會多出一個選單:Git,裡面有兩個程式:Git GUI 和 Git Bash。前者是圖形操作介面,後者是命令列視窗。Git 的預設安裝目錄是 c:\Program Files\Git(64 位元作業系統則是 c:\Program Files (x86)\)。
HTTP 存取
由於我要讓用戶端可透過 HTTP 協定來存取版本庫,因此還要把 Git 安裝目錄下的 bin\libiconv2.dll 複製到安裝目錄下的 libexec\git-core\ 底下。少了這個動作,將來透過 HTTP 存取版本庫時,就會出現 HTTP 500 Internal Server Error 的訊息(這是安裝 v1.7.4 時碰到的情形,我不確定之後的版本是否還會如此)。如下圖所示:
安裝完成後,為了讓 git 可以正確處理中文,還得設定一下 git 的全域參數。做法是開啟 Git Bash 命令列視窗:開始 > 程式集 > Git > Git Bash,然後輸入以下命令:
$ git config --global gui.encoding utf-8
Git 的全域組態檔的完整路徑檔名是 C:/Users/使用者帳戶名稱/.gitconfig。
Step 2: 安裝 Apache HTTP Server
欲提供 HTTP 的存取方式,可以利用 Apache HTTP Sever。我安裝的版本是 Apache 2.2.19(包含 OpenSSL)。
安裝好 Apache 之後,修改組態檔 httpd.conf,令它使用 8080 port,以免和 IIS 搶 80 port。
接下來,一樣是修改 httpd.conf。找到 <directory> 標籤,確認其設定如下:
<directory /> Options FollowSymLinks AllowOverride None Order deny,allow Allow from all </directory>
接著在 httpd.conf 的最後面加入以下文字:
#Set this to the root folder containing your Git repositories.
SetEnv GIT_PROJECT_ROOT D:/GitRepos
# Set this to export all projects by default (by default,
# git will only publish those repositories that contain a
# file named “git-daemon-export-ok”
SetEnv GIT_HTTP_EXPORT_ALL
# Route specific URLS matching this regular expression to the git http server.
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:/Program Files/git/libexec/git-core/git-http-backend.exe/$1"
<Location />
AuthType Basic
AuthName "GIT Repository"
AuthUserFile "D:/GitRepos/htpasswd"
Require valid-user
</Location>
Note: 如果你希望將來透過遠端存取版本庫時,一律使用 http://my-server/git/* 開頭的 URL,則可將 ScriptAliasMatch 指令改為 "(?x)^/git/(.*/(HEAD | \ ......."
- 開啟 Git Bash 命令列視窗:開始 > 程式集 > Git > Git Bash。
- 輸入以下命令,以建立一個空的版本庫('$' 符號是提示字元,不用輸入):
$ cd D:/GitRepos
$ git init MyProject
這樣的話,以後我們就可以用類似「http://my-server/Projects/PrjA」的網址來存取版本庫。
後記:我後來又整理了一篇<Git over HTTPS on Windows>,可以讓 Git(其實主要是 Apache)支援 HTTPS 協定。
- Hosting a Git server under Apache on Windows by Jeremy Skinner
- Git over http(s) (SSL and WebDAV) with Apache on Windows by Jürgen Bouché
7 回應:
- undancer 提到...
-
看了那么多Git的安装文章,还是中文亲切。(泪)
- 2011年5月30日上午3:09
- 匿名 提到...
-
非常好的文章,感謝提供。
另外請問可否提供人員的權限管理?
譬如限制某些人只能 pull某些專案,謝謝! - 2011年12月15日下午2:54
- Huanlin Tsai 提到...
-
這個部份我還沒研究耶...也許可以找看看 Gitosis 有沒有幫助。
- 2011年12月15日下午9:54
- 匿名 提到...
-
我自己也在windows下建立了一個git的http server,
想要做到有人更動server上的資料時可以發送mail給同一個專案的人員,
看了一些資料說要啟用hook功能,但是這些hook都是linux用的,
windows下都無法發揮作用,
所以想請教一下是否有什麼方式可以在windows下啟用git hook的功能
謝謝~ - 2011年12月16日下午11:59
- Huanlin Tsai 提到...
-
你是打算每當有人 commit/push 就發送 mail 通知嗎?這樣似乎太頻繁了。Anyway, 可能是因為 Git on Windows 是執行於 cigwin 環境下,所以不像 Subversion 只要寫個檔名合乎規範的 exe 程式就能運作。我一時也沒找到現成可以用的 hook for Git on Windows 範例。一個比較笨的作法,是用一個排程定時去 pull 新檔案下來,若發現有新檔案,就發 email 通知。理論上似乎可行。
- 2011年12月17日上午12:40
- Huanlin Tsai 提到...
-
我在想,有沒有可能捨棄 Git,改用 Mercurial?同樣都是分散式版控系統,Mercurial 比 Git 簡單些,對 Windows 平台的支援也更好,還有現成的 Mercurial.Net 類別庫可以協助你撰寫 hook。
- 2011年12月17日上午4:43
- 匿名 提到...
-
謝謝回覆
我的選擇只兩個,SVN和GIT
這兩個是可直接整合到XCode(iOS開發工具)
SVN我已經有可以運作的系統
不過考慮到往後的一些狀況所以想要另外建立一個GIT系統
更重要的是公司內只有我在用版本控制系統
其他人沒在用,最多只知道(聽過)SVN和GIT(和我合作是會強制用SVN)
所以其他的版本控制系統目前不在考慮的範圍內 - 2011年12月17日下午9:08
