每個項目中,原始碼的版本控制是不可少的,不敢想象如果一個沒有好的版本控制的項目會是什麼樣,一定是Source管理異常混亂的那種。常用的版本控制工具以前有2種,分別是微軟的VSS,開源的CVS,現在則有了強大的SubVersion。
以前做項目一般用CVS比較多,畢竟免費麼,不過CVS有個比較大的遺憾就是管理文檔有點力不從心,特別是檔案名稱或者檔案夾名中帶有漢字的時候,如果某些漢字的第一個位元組的編碼正好和CVS中的有些關鍵字符一致的話,那麼就會出現檔案夾名亂碼的情況,這個情況以前我也被困擾過,後來乾脆用了微軟的VSS解決掉的。
VSS管理文檔不錯,不過由於不支援多使用者同時checkout和merge的功能,所以在開發項目中還是覺得有點不便,好像在Visual Studio 2005中附帶的VSS可以有支援Merge的功能了,不過自己沒有用過,也就不再忘加評論。
這裡著重說一下SubVersion,以前這東西我只是聽說過,也從SourceForge上把Spring的最新的原始碼給checkout下來過,不過具體怎麼建立Subversion還都沒有研究過。今天一時興起,看了協助文檔還有一些資料,成功配置了Subversion,也把Subversion和Apache Server進行了整合。
首先安裝Apache Server,我裝的是2.0.59版本的Apache,據說別的低版本的Apache Server可能會運行有問題,不過用這個版本的Apache Server應該比較好。第二安裝SubVersion,在Google很快就可以搜尋到SubVersion的安裝檔案下載。先安裝好Apache Server 再安裝Subversion的話,在SubVersion中就會自動更新Apache Server的httpd.conf設定檔,否則的話,我們需要自己手工修改設定檔,修改如下。
首先需要添加如下兩行
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module "C:/Program Files/Subversion/bin/mod_dav_svn.so"
LoadModule authz_svn_module "C:/Program Files/Subversion/bin/mod_authz_svn.so"
其中,前兩行只要把原來注釋符號去掉就好了,後面兩行subVersion的so檔案需要自己手動指定。
然後在Apache的httpd.conf中還要增加如下一段
<Location /svn>
DAV svn
SVNParentPath D:/svn
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile D:/passwd
Require valid-user
</Location>
其中/svn代表用http的訪問路徑,D:/svn指定了svn的存放路徑,AuthType Basic代表採用Basic方式進行認證,認證的使用者名稱密碼檔案是D:/passwd ,其中只允許認證的使用者才能訪問。passwd檔案的建立比較簡單,利用Apache的bin目錄下的htpasswd.exe來產生,比如htpasswd.exe -c passwd xudl這個命令,就會在目前的目錄下建立一個passwd的檔案,其中建立一個使用者,使用者名稱是xudl,在後來的命令提示裡面會讓你輸入密碼的,等密碼得到確認以後,一個passwd檔案就完成了。
把剛才的passwd檔案複製到D:根目錄下,因為在剛才Location中有這麼一個配置AuthUserFile D:/passwd,所以把passwd檔案放在了相應的位置。
這個時候伺服器都配置完畢,開始要匯入一個倉庫到SVN中了,在命令列下輸入
svnadmin create /svn/repos,然後就會建立了一個repos倉庫。這個時候用瀏覽器輸入http://127.0.0.1/svn/repos 以後,在正確輸入使用者名稱密碼以後,就會看到一個SVN的list畫面,這個時候倉庫是空的,所以一個檔案都沒有。我們現在開始匯入工程,採用如下的命令
svn import . file:///svn/repos --message "Initial repository"
就可以把當前的目錄倒入到倉庫中了,再用svn co file:///svn//repos 就可以把剛才倒入的souce給重新checkout出來了。
在匯入以後再用瀏覽器訪問http://127.0.0.1/svn/repos ,然後就可以看到你剛才checkin的東西了。自此,我們的SubVersion配置初步完成。