通常我們寫程式,寫一寫想到要改,再改一改,改完之後,再改,一直改下去的結果,就是已經不知道之前再改什麼了,要回頭看已經無從看起,這時候想說可以建立好幾個檔案版本,結果,桌面上越來越多檔案,已經不知道再改什麼了…..越來越亂。
這時候版本控制就是要解決專案再開發時候會遇到版本問題而出現的,以前有Apache SVN,不過SVN是集中式版本控制,無法在client端存下一分自己的版本,Git是後起的版本控制,與SVN最大不同的是,它是分散式版本控制,與server端同步之外,也與client同步。
剩下的Git的用法在這裡就不多做介紹,詳情的用法可以觀看這個投影片,如果想把專案發佈給別人觀看或是專案可以open source,可以使用Github。
不過重點來了,專案不想被公開,可是又想用Git版本控制怎麼辦?這個時候有兩條選擇方案,付費使用Github開私人的專案,第二個自架Git server,前者要$,所以比較沒有人會願意選擇,後者可能是大家願意去嘗試的。此篇就是要介紹該如何架設Git server在Windows 上,我相信Linux上架設並不困難,Windows才是重點也是環境所屈ORZ…..
架設Git server,有兩種方法,如果用Github就會知道,一種是使用http/https,這種方式缺點就是,帳號和密碼都是必須要打的,還有前者沒有加密,要使用這方式,最好的建議是使用後者,部過這個教學只會教前者怎麼架設起來ORZ…..後者可能要交給其他人研究了,不過沒有關係,之後還會有一篇利用ssh的方式存取Git server。
第一步
我們要用到http,就跟http web server拖不了關係,所以我們選擇有Apache和IIS,都是可以放靜態網頁的地方,我選用前者的原因是大部分教學是使用這個,IIS似乎是可以搭配別的套件做架設,不過這裡就不多做介紹,還是以Apache為主。我使用的Apache的版本為httpd-2.2.19-win32-x86-openssl-0.9.8r.msi,有安裝的封裝檔可以下載。可以到Apache上的鏡像網站下載。(可參考圖一)
第二步
把Apache安裝檔打開,需要注意的是圖二中的步驟,這個步驟Network domain和Server domain都填localhost,下面的管理郵件信箱,可以填寫自己的其中一個,這些最後都會幫我們寫到httpd.conf裡,之後就是最後一個核取選項,第一個是說要用port 80,第二個是 port 8080,如果這臺server還有跑其他的Apache或是有占用poort 80的話,可以使用第二個,第二個是指監聽port 8080,當然之後也可以去httpd.conf裡去改。整個安裝好之後,Apache會被開啟並被歸類到工作列表中,圖中我會顯示有兩個Apache版本是因為這台本身還有XAMPP server,所以有2.2與2.4,不過這次我們要操作的是2.2,基本上2.4開啟就好。(參考圖二)預設Apache2.2是關閉的,只有2.4會開啟,圖中是我都設定好所以都是開啟的。
第三步
開啟Apache中的httpd.conf,預設安裝路徑為 : C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf,我的作業系統是x86,如果是x64,則在Program Files,把設定檔案開啟之後,找到下面的檔案。
<Directory /> Options FollowSymLinks AllowOverride None Order deny,allow Deny from all </Directory>
把它改成
<Directory "D:/GitRepos"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> <Directory "C:/Program Files (x86)/Git/libexec/git-core/"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
SetEnv GIT_PROJECT_ROOT D:/GitRepos SetEnv GIT_HTTP_EXPORT_ALL ScriptAliasMatch \ "(?x)^/git/(.*/(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 (x86)/Git/libexec/git-core/git-http-backend.exe/$1" <Location /git> AuthType Basic AuthName "GIT Repository" AuthUserFile "D:/GitRepos/htpasswd" Require valid-user </Location>
由於我要讓用戶端可透過 HTTP 協定來存取版本庫,因此還要把 Git 安裝目錄下的 bin\libiconv-2.dll (或 libiconv2.dll)這兩個檔案複製到 Git 安裝目錄下的 libexec\git-core\ 底下。少了這個動作,將來透過 HTTP 存取版本庫時,就會出現 HTTP 500 Internal Server Error 的訊息。