Git Server on Windows 安裝手記
from http://huan-lin.blogspot.tw/2011/05/install-git-server-and-apache-on.html
這篇主要是記錄我在 Windows 平台安裝 Git 的過程。先描述一下作業需求:
用戶端和伺服器端的作業系統都是 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>
其中第一道指令是告訴 Git 你的版本庫放在哪裡,第二道指令表示該目錄下的所有版本庫都可以透過 http(s) 的方式存取。第三道指令則是令 Apache 把 Git 相關 URL 導向給 Git 的 http 處理程式。注意:如果你的 Windows 作業系統是 64 位元,裡面的 C:/Program Files/.... 就要改一下。最後的 <Location> 區段設定了虛擬根路徑 "/" 的驗證規則,D:/GitRepos/htpassword 是帳號密碼檔。
完成上述修改之後,重啟 Apache HTTP 服務。
Note: 如果你希望將來透過遠端存取版本庫時,一律使用 http://my-server/git/* 開頭的 URL,則可將 ScriptAliasMatch 指令改為 "(?x)^/
git/(.*/(HEAD | \ ......."
Step 3: 建立版本儲存庫
這裡先建立一個測試用的版本庫,以確認用戶端可以透過 HTTP 協定取出檔案。步驟如下:
- 開啟 Git Bash 命令列視窗:開始 > 程式集 > Git > Git Bash。
- 輸入以下命令,以建立一個空的版本庫('$' 符號是提示字元,不用輸入):
$ cd D:/GitRepos
$ git init MyProject
參考下圖:
此範例的 git init 命令會在 MyProject 目錄下建立一個名為「.git」的隱藏目錄,Git 用來管理版本所需的控制檔案全都放在這裡。MyProject 這個目錄本身則是工作目錄,你可以在此目錄下加入檔案或子目錄。
Note: 在初次建立一個可讓多人共享的版本庫時,應該要使用 git init --bare 命令。加上 --bare 的參數,表示要建立「單純的」版本庫,也就是不含任何工作複本(working copy)檔案,而只包含版本控制相關的檔案。
Note: 版本庫的根目錄(這裡是 D:\GitRepos)之下的第一層子目錄不必一定要建立成版本庫。我們也可以在其下建立單純的子目錄,然後在各個子目錄底下建立版本庫。例如:
D:\GitRepos
+-- Projects
+-- PrjA (版本庫)
+-- PrjB (版本庫)
+-- Notes
+-- DotNet (版本庫)
這樣的話,以後我們就可以用類似「http://my-server/Projects/PrjA」的網址來存取版本庫。
Step 4: 取出版本庫
比較正確的說法,是把版本庫複製(clone)一份回自己家裡(本機)。一樣開啟 Git Bash 視窗,切換到你打算存放本機版本庫的目錄,然後使用 git clone 把檔案庫拉回來。指令如下:
$ cd d:/Work
$ git clone http://localhost:8080/MyProject
接著應該會要求你輸入帳號和密碼,若輸入正確,便可將本庫取回。參考下圖:
使用 git clone 命令時,網址也可以包含使用者帳戶名稱,例如:
$ git clone http://michael@localhost:8080/MyProject
如果欲複製的遠端版本庫不是空的,Git 會先壓縮檔案再傳送,而且在螢幕上顯示壓縮的進度,如下圖:
下一步
後續的作業,就是在本機的工作目錄下進行日常的檔案修改與版本提交程序了。這部分的操作程序和指令,網路上已經可以找到很多參考資料,就不在此贅述。
後記:我後來又整理了一篇<
Git over HTTPS on Windows>,可以讓 Git(其實主要是 Apache)支援 HTTPS 協定。
參考資料