最近想把公司原來(lái)用CVS管理的代碼遷移到SVN中去。主要是因?yàn)镾VN是整個(gè)版本庫(kù)共享一個(gè)版本歷史,比較方便完整的Checkout某個(gè)工程。而且SVN還有一些CVS所不具有的良好特性,比如支持對(duì)目錄版本進(jìn)行管理,支持重命名和移動(dòng)等。
上網(wǎng)查了下,大部分人用cvs2svn來(lái)將CVS版本庫(kù)遷移到SVN中。但是cvs2svn似乎要用Python來(lái)運(yùn)行,我向來(lái)對(duì)這個(gè)日本人發(fā)明的腳本不感興趣,所以希望能找到其它方案。最后發(fā)現(xiàn)SVN Importer。SVN Importer不僅可以進(jìn)行CVS版本庫(kù)到SVN版本庫(kù)的遷移,而且還可以遷移PVCS、VSS、ClearCase、MKS、StarTeam等VCS(Version Control System,版本管理系統(tǒng))的版本庫(kù)到SVN。
大家去Subversion主頁(yè)的時(shí)候,通常都是直接去的www.subversion.org(subversion.tigris.org)。其實(shí)Subversion還有另一個(gè)主頁(yè)www.subversion.com。.COM站我去得少,卻沒(méi)想到一進(jìn)去最明顯的那個(gè)位置就是SVN Importer。這個(gè)工具是用Java實(shí)現(xiàn)的,需要JRE來(lái)運(yùn)行。而且,由于SVN Importer幾乎都是使用源VCS自帶的命令行工具來(lái)導(dǎo)出數(shù)據(jù),所以需要安裝源VCS。另外,SVN Importer向SVN導(dǎo)入數(shù)據(jù)的時(shí)候,用的是Subversion的svnadmin,所以還需要安裝Subversion。
SVN Importer有兩種方案來(lái)遷移CVS的版本庫(kù)。
1. 使用SVN Importer內(nèi)置的Java CVS通過(guò)pserver協(xié)議來(lái)導(dǎo)出數(shù)據(jù);
2. 使用RCS直接從CVS版本庫(kù)文件系統(tǒng)中導(dǎo)出數(shù)據(jù)。
數(shù)據(jù)遷移過(guò)程分三步。和其它工具類(lèi)似,都是讀數(shù)據(jù)、生成DUMP、導(dǎo)入DUMP。整個(gè)過(guò)程及參數(shù)配置都在文檔里寫(xiě)得比較詳細(xì)。文檔目前只有英文的,不過(guò)目前Subversion中文站(www.subversion.org.cn)正在翻譯SVN Importer的文檔,相信中文文檔不久就會(huì)面世。順便打個(gè)廣告——請(qǐng)有興趣翻譯的朋友與subversion.org.cn站長(zhǎng)聯(lián)系(http://www.subversion.org.cn/index.php?option=com_contact&Itemid=3),申請(qǐng)加入翻譯隊(duì)伍。
中文文檔出臺(tái)之前,總不能就不用SVN Importer吧,所以我就根據(jù)個(gè)人經(jīng)驗(yàn)簡(jiǎn)單的介紹下吧。
SVN Importer的安裝和運(yùn)行很簡(jiǎn)單。下載之后解壓到某個(gè)目錄即完成安裝。安裝目錄下有一個(gè)run.bat文件。運(yùn)行run.bat的時(shí)候要帶2-3個(gè)參數(shù)。第一個(gè)參數(shù)是操作模式;第二個(gè)參數(shù)是配置文件;第三個(gè)參數(shù)指定一個(gè)日期,表示僅遷移這個(gè)日期之后的數(shù)據(jù)。
SVN Importer有3種操作模式:完整、增量和列表。完整模式用于將源VCS的版本庫(kù)數(shù)據(jù)全部導(dǎo)出;增量模式則用在第一次的完整模式之后,導(dǎo)出新增加的數(shù)據(jù);列表模式只將要導(dǎo)出的數(shù)據(jù)顯示出來(lái),不實(shí)際導(dǎo)出。
至于配置文件,在安裝目錄下已經(jīng)有一個(gè)config.properties作為示例。使用SVN Importer的時(shí)候只需要復(fù)制一份這個(gè)文件,再稍做修改即可。
配置文件中主要分四個(gè)部分:
第一部分,常規(guī)配置,這里選擇源版本庫(kù),設(shè)置臨時(shí)目錄,以及中間文件的位置等。重要的一些設(shè)置如下:
srcprovider=源VCS,可以是cvs、cvsrcs、pvcs、vss、cc、mks等
import_dump_into_svn=yes或no,是否在生成DUMP文件之后立即導(dǎo)入SVN中(選否則不導(dǎo)入)
full.dump.file=完整模式時(shí)生成的DUMP文件路徑
incr.dump.file=增量模式時(shí)生成的DUMP文件路徑
incr.history.file=歷史文件路徑,這個(gè)文件在第一次完整模式時(shí)生成,以后使用增量模式時(shí)需要讀取其內(nèi)容。
第二部分是SVN相關(guān)的設(shè)置,主要包括svnadmin的位置和版本庫(kù)中的一些設(shè)置。關(guān)鍵設(shè)置如下:
trunk_path=/trunk,主分支所在目錄
branches_path=/branches,分支目錄
tags_path=/tags,標(biāo)簽保存目錄
svnimporter_user_name=SvnImporter,創(chuàng)建版本庫(kù)的用戶(hù)名
svnadmin.executable=svnadmin的路徑
svnadmin.repository_path=產(chǎn)生的SVN版本庫(kù)路徑
svnadmin.parent_dir=將數(shù)據(jù)導(dǎo)入版本庫(kù)里的哪們目錄。想設(shè)置為根目錄,將這個(gè)值設(shè)置為.(點(diǎn)號(hào))即可;或者可以設(shè)置成工程名。trunk、branches和tags都會(huì)產(chǎn)生在這個(gè)目錄之下。
第三部分是對(duì)所選擇的源VCS進(jìn)行配置,用于導(dǎo)出數(shù)據(jù)。因?yàn)楣ぷ髦兄皇菫榱诉w移CVS的數(shù)據(jù),所以只用到了導(dǎo)出CVS的兩種配置。稍后說(shuō)明。
第四部分是對(duì)日志文件的一些配置。
第一次是直接使用的srcprovider=cvs,通過(guò)pserver來(lái)導(dǎo)出數(shù)據(jù)。想對(duì)于cvsrcs來(lái)說(shuō),這個(gè)速度要稍慢一些,但是它不需要安裝第三方的工具,只需要使用內(nèi)置的Java CVS就行,所以用來(lái)導(dǎo)出小項(xiàng)目還是比較好的。而且配置也比較簡(jiǎn)單,主要就是CVSROOT中的一些配置。
cvs.class=org.polarion.svnimporter.cvsprovider.CvsProvider
cvs.username=訪(fǎng)問(wèn)CVS版本庫(kù)的用戶(hù)名
cvs.password=上面用戶(hù)名登錄CVS版本庫(kù)時(shí)的密碼
cvs.hostname=主機(jī)地址
cvs.repository=CVSROOT目錄
cvs.modulename=要導(dǎo)出的工程(或目錄)
cvs.tempdir=存放臨時(shí)文件的目錄
后來(lái)考慮到CVS里面的工程都比較大,而且可能需要直接從版本庫(kù)文件導(dǎo)出數(shù)據(jù)(不是通過(guò)客戶(hù)端去訪(fǎng)問(wèn)CVS版本庫(kù),而直接訪(fǎng)問(wèn)版庫(kù)的文件),所以又嘗試了使用srcprovider=cvsrcs。這個(gè)情況下要用GNU RCS來(lái)導(dǎo)出CVS數(shù)據(jù),所以需要安裝RCS(http://www.gnu.org/software/rcs/rcs.html)。
RCS目前最新是5.7版,分3個(gè)包下載,分別是rcs57pc1、rcs57pc2和rcs57pc3。這3個(gè)文件包分別是編譯好的二進(jìn)制文件、文檔和源碼。其實(shí)只需要下載第一個(gè)包就行了,需要用到的也只是bin目錄下的rlog和co兩個(gè)命令而已。相關(guān)配置大概有:
cvsrcs.class=org.polarion.svnimporter.cvsprovider.CvsRcsProvider
cvsrcs.repository_path=CVS版庫(kù)文件目錄
cvsrcs.rlog_command=rlog命令的路徑
cvsrcs.co_command=co命令的路徑
cvsrcs.tempdir=保存臨時(shí)文件的目錄
配置好之后,一開(kāi)始每次運(yùn)行都失敗,看日志也不知所云。大概是說(shuō)某個(gè)文件沒(méi)找到。于是決定手工運(yùn)行rlog.exe來(lái)試試看。
rlog.exe cvsroot\common\common.sln,v
結(jié)果報(bào)錯(cuò)
rlog: cvsroot\common\RCS/common.sln,v: No such file or directory
很奇怪,為什么rlog非要塞一個(gè)RCS/目錄進(jìn)去呢?后來(lái)在論壇上查到,使用cvsrcs的時(shí)候,需要設(shè)置環(huán)境變量RCSINIT=-x,v/,雖然看不明白是啥意思,不過(guò)設(shè)置了這個(gè)環(huán)境變量之后SVN Importer跑成功了。
為了搞明白這個(gè)設(shè)置,所以只好去下載了RCS的文檔來(lái)查看。在文檔里搜索-x,v/,發(fā)現(xiàn)原來(lái)是配置RCS處理的文件后綴。未設(shè)置的情況下會(huì)去RCS子目錄中查找文件。-x是設(shè)置后綴的參數(shù),v是CVS版本庫(kù)文件的后綴,而/是分隔符,其后沒(méi)有東西表示為空。所以這個(gè)設(shè)置是兼顧,v文件和RCS/兩種情況。
最后,由于CVS不能記錄目錄的更改歷史,最后導(dǎo)入到SVN后,從HEAD里取出來(lái)的數(shù)據(jù)中有許多原來(lái)刪除掉的目錄和文件。感覺(jué)多冒出來(lái)的那些都應(yīng)該是些空目錄才對(duì),搞不明白為什么還有一些刪除掉的文件也冒出來(lái)了,還不太好找規(guī)律。所以,只好先對(duì)照從CVS里Checkout出來(lái)的最新版,刪除掉多余的目錄和文件之后,再Checkin到SVN中,這才算完成遷移過(guò)程。
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,信管網(wǎng)網(wǎng)站提供的以上信息僅供參考,如有異議,請(qǐng)以權(quán)威部門(mén)公布的內(nèi)容為準(zhǔn)!
信管網(wǎng)致力于為廣大信管從業(yè)人員、愛(ài)好者、大學(xué)生提供專(zhuān)業(yè)、高質(zhì)量的課程和服務(wù),解決其考試證書(shū)、技能提升和就業(yè)的需求。
信管網(wǎng)軟考課程由信管網(wǎng)依托10年專(zhuān)業(yè)軟考教研傾力打造,官方教材參編作者和資深講師坐鎮(zhèn),通過(guò)深研歷年考試出題規(guī)律與考試大綱,深挖核心知識(shí)與高頻考點(diǎn),為學(xué)員考試保駕護(hù)航。面授、直播&錄播,多種班型靈活學(xué)習(xí),滿(mǎn)足不同學(xué)員考證需求,降低課程學(xué)習(xí)難度,使學(xué)習(xí)效果事半功倍。
發(fā)表評(píng)論 查看完整評(píng)論 | |