Windows相關架站起步走(4)架設Git server

通常我們寫程式,寫一寫想到要改,再改一改,改完之後,再改,一直改下去的結果,就是已經不知道之前再改什麼了,要回頭看已經無從看起,這時候想說可以建立好幾個檔案版本,結果,桌面上越來越多檔案,已經不知道再改什麼了…..越來越亂。

這時候版本控制就是要解決專案再開發時候會遇到版本問題而出現的,以前有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圖一

第二步

把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圖二

第三步

開啟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>

 

PS:注意上方兩個藍字部分,第一段紅字是要修改步驟6設定的路徑,第二段紅字就稍微注意一下你git是安裝在Program Files (x86)還是Program Files
改完後在最後面插入以下內容
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>
藍字部分特別注意,D:/GitRepos是我自己設定要放置git倉儲的地方,要修正為你自己開設的資料夾名稱與路徑
D:/GitRepos/htpasswd的話,則是之後的步驟我們要創立一個驗證檔出來,所以檔名必須叫做 htpasswd(重要!)
第四步
在D槽建立一個叫做GitRepos,當作放Git專案的根目錄,接著去安裝Git client,可以到這個網址找這個版本下載,現在不能去官網下載2.0版本以上的原因是因為,這個版本我在設定的時候設定上有問題,所以上Github網站之後有找到先前的版本,所以還是有這樣的解決方法。這個網址在這裡。去下載這個檔案回來安裝Git-1.9.5-preview20150319.exe。
安裝Git for windows可以去參考下列這個網址,按照裡面安裝Git for windows的步驟安裝。
順便也要設定上面網址中所提到的這個 :
HTTP 存取
由於我要讓用戶端可透過 HTTP 協定來存取版本庫,因此還要把 Git 安裝目錄下的 bin\libiconv-2.dll (或 libiconv2.dll)這兩個檔案複製到 Git 安裝目錄下的 libexec\git-core\ 底下。少了這個動作,將來透過 HTTP 存取版本庫時,就會出現 HTTP 500 Internal Server Error 的訊息。
接著,要做下列步驟原因是,要設定一個目錄為放所有專案的根目錄
在D槽,對著GitRepos的資料夾按右鍵,選擇Git Bash,會出現console視窗,
輸入
 git init –bare project
建立出project資料夾後,再輸入
cd project
進入後再輸入 
git update-server-info
輸入完再輸入
touch daemon-export-ok
第五步
接下來要產生D:/GitRepos/htpasswd這個檔案,所以我們可以用Apache內建的htpasswd指令做產生存取的時候輸入的帳號和密碼,先切換到C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin目錄下,再按右鍵開啟git-bash接著輸入這一行指令 : htpasswd -cmb /D/GitRepos/htpasswd hello 1234,或是先切換到目錄下,需要注意的是,要確定要產生的htpasswd對應專案根目錄,也就是 /D/GitRepos目錄。這個要與先前我們在httpd.conf設定的目錄要一致。我們指令中,hello是帳號 1234是密碼
如果看到D:/GitRepos/目錄下有htpasswd這個檔案代表產生成功了,下一步我們可以新建一個專案在D:/GitRepos/根目錄中測試我們是否成功建立一個Git server。(參考圖三)
整個設定完成後,記得要把Apcahe 2.2開啟或是重新啟動
apache圖三
第六步
我們在D:/GitRepos/下建立一個簡單的Git 專案,我是直接使用我之前開發過的專案當作例子,把它放到D:/GitRepos/目錄中。可以參考這下面圖四到圖六中的步驟去做。
其中圖四與圖五是在server上操作。圖六是在我們的client上做。(圖五與圖六的存取server網址bigsu.no-ip.biz可能要改成自己的網域名稱或是自己的固定IP或是浮動IP。)
apache圖四apache圖五
apache圖六
[參考文章]
Git Server on Windows 安裝手記
windows架git server的安裝流程紀錄
[注意事項]
1. 如果有把Windows防火牆開啟的話需要把8080或是有給Apache使用到的port number開啟,新增輸入的規則,詳情的設定可以參考這篇文章中的注意事項
2. 如果Apache重新啟動之後,出現request operation failed彈跳的視窗,代表在做設定Apache的httpd.conf或是Git for windows沒有移動libiconv2.dll或libiconv-2.dll到上述的目錄下,建議步驟整個重頭到尾檢查一次,如果還有問題,可能就要寄信給我問問題了。信箱 : peter279k@gmail.com
[環境變數的設定]
如果還是不行的話,那記得要加入控制台中Path的環境變數,如下圖七與八。在圖八加入後面加入;C:\Program Files (x86)\Git\bin;C:\Program Files (x86)\Git\libexec\git-core預設路徑。
如果安裝在別的路徑就自己去找,作業系統如果是x86預設路徑會變成;C:\Program Files\Git\bin;C:\Program Files\Git\libexec\git-core
要記住每一個環境變數結束後會用一個分號隔開
apache圖七apache圖八