Windows下Git服務(wù)器搭建及問題處理技巧
最近發(fā)現(xiàn)團(tuán)隊(duì)的代碼版本管理比較混亂,甚至是根本就沒有版本管理的意識,一個(gè)項(xiàng)目的源碼有時(shí)候找兩三次才找到正確的版本。以前我對這塊沒做什么特別的要求,只要是大家自己用的順手,VSS、SVN、TFS都無所謂。考慮到離線工作和以后的非微軟開發(fā)環(huán)境,于是打算用Git來規(guī)范統(tǒng)一團(tuán)隊(duì)內(nèi)的版本管理。說到Git,其實(shí)GitHub是不錯(cuò)的選擇,只不過我們的源碼和開發(fā)文檔與運(yùn)營商的不少系統(tǒng)都有或多或少的關(guān)聯(lián),將其放置于互聯(lián)網(wǎng)上的風(fēng)險(xiǎn)度還是比較高的;基于此,我還是選擇搭建自己的Git服務(wù)器,將代碼、文檔、版本信息等存放在自己的內(nèi)網(wǎng)服務(wù)器上,那是最好不過的了。
我們的內(nèi)網(wǎng)Web服務(wù)器基本都是Windows Server系統(tǒng),查了一些資料,真心覺得在Win系統(tǒng)下搭Git服務(wù)器的配置步驟很坑爹……直到看到Dudu的 用開源ASP.NET MVC 程序 Bonobo Git Server 搭建 Git 服務(wù)器,豁然開朗。恩,這下有戲了,就用它了。這個(gè)開源的解決方案現(xiàn)在是V1.1版,已經(jīng)加入了中文資源文件。
我用的是一臺Windows Server 2003,IIS 6 + WebDAV + ASP.Net MVC 3。基本上只要按照部署ASP.NET MVC站點(diǎn)的步驟模式一路走下來,就不會有什么大問題。具體的安裝步驟和Git客戶端的使用介紹就不多說了,Dudu已經(jīng)寫的很詳細(xì)了,網(wǎng)上也有大把的TortoiseGit使用教程。我這里只記錄下我在配置和使用過程中遇到的一些問題。站點(diǎn)部署完了之后,注意需要給App_Data文件夾賦予寫權(quán)限,因?yàn)镾QLite數(shù)據(jù)庫文件、站點(diǎn)的全局配置信息以及錯(cuò)誤日志都在這個(gè)文件夾下。Bonobo.Git.Server站點(diǎn)能正常運(yùn)行之后,我們就可以通過Git客戶端像使用GitHub一樣clone、commit、pull、merge、push等操作自己的版本庫了。
在這個(gè)過程中,遇到的最大問題是本地版本庫無法提交到Git服務(wù)器。代碼提交到本地沒什么問題,但是當(dāng)Push到服務(wù)端的時(shí)候,總是提示:fatal: authentication failed:

心想肯定是哪里配置或者設(shè)置不對,因?yàn)楫?dāng)把版本庫勾選中"匿名"的時(shí)候,是可以不用輸入用戶名和密碼而能夠正確提交到服務(wù)端的,但這樣一來就無法有效的通過權(quán)限和用戶名來管理和查看版本信息了。最后終于找到解決方法:在IIS中,把目錄安然性 -> 編輯-> 身份驗(yàn)證方法 -> 集成Windows身份驗(yàn)證 去掉,整個(gè)上傳過程就暢通無阻了;如果不做這樣設(shè)置的話,我們則需要把每個(gè)在Git服務(wù)端站點(diǎn)中添加的用戶也設(shè)置成Window系統(tǒng)的用戶。

在登錄后的服務(wù)端網(wǎng)站中,瀏覽上傳的文件時(shí),會報(bào)404錯(cuò)誤;在本地開發(fā)環(huán)境中,瀏覽及下載文件都很正常。這種情況,我們只要知道它定義的后綴名就很好解決了。Bonobo.Git.Server中瀏覽文件、下載文件分別定義的是.browse、.download后綴名,于是在 IIS的 主目錄 -> 配置 -> 添加 對應(yīng)的擴(kuò)展名就可以了:

在使用過程中,我還發(fā)現(xiàn)如果版本庫的名稱中包含中文或者小數(shù)點(diǎn)時(shí),會有問題(暫未測試其它特殊字符)。如果包含中文,提交到服務(wù)端時(shí)會失敗;如果包含小數(shù)點(diǎn),連打開這個(gè)庫的信息頁面都會404……這些小問題也很好處理,我們可以把包含中文的Git庫位置自動轉(zhuǎn)換成HTML編碼,可以在新增和修改版本庫時(shí)自動替換小數(shù)點(diǎn)或者其它特殊字符等等。

好了,我們終于可以像使用GitHub一樣,使用我們自己的Git服務(wù)器了!團(tuán)隊(duì)內(nèi)測試試運(yùn)行了兩周,運(yùn)行情況還比較穩(wěn)定。
大家在使用過程中有什么好的方法和問題也可以一起分享討論下。




















