CVSNT轉到Subversion
ilmare| May 25, 2007 4:33 pmCVSNT算是CVS的另一種增強版,至於啥是CVS,從字面上的意思Concurrent Versions System,應該是可以翻譯成”協同版本系統”。這是共同開發軟體的好用工具,或者是說不可或缺。
Subversion的功能與CVS差不多,但是Subversion算是重新開發的東西,改進了原本CVS一些根本性的問題,主要的改進在branches/tags的處理上,加上很多大的軟體開發計畫都逐漸的改用Subversion,趁著我們還沒有很深入的使用CVSNT之前,就趕緊給他導入Subversion吧。
CVS2SVN就是相當合適的一個工具,他是由發展Subversion的同一個地方出來的,不過事實上他並不支援cvsnt,但是不乏成功的例子,如這邊。所以我還是決定嘗試一下,初步的結果是轉的過去,不過有出現許多的問題,就之後再討論。
綜觀我們的程式,是在win32下使用的視窗環境程式,其實大部分的問題是檔案特性的部分,大家都知道win32的環境,檔案會分成二進位檔與文字檔兩種,在cvsnt中對於二進位檔的處理,我們都有加上kb這個旗標,只是不知道未啥有些檔案轉的過去有些卻轉不過去,在嘗試了好幾天之後終於知道其中的奧妙所在。
首先把我用到的cvs2svn的選項先列出來:(使用的環境為Fedora Core 4 with Python 2.4.3)
- –dumpfile=PATH 輸出轉好的SVN到指定目錄下的檔案名稱中
- –use-cvs 若用CVSNT一定要用這個選項
- –encoding=ENC 指定檔案的編碼,因為檔案中免不了有中文的部分,所以還是指定一下
- –force-branch=REGEXP 第一次轉的時候出現branch不清楚的狀況,轉不過去,就使用這個選項,記得REGEXP是指出問題的那個branch的名稱,要是出問題的東西太多了,就得使用正規表示法囉
- –mime-types=FILE 太部分的失敗都出現在二進位檔的格式不對,最後終於使用mime-types來處理所有二進位的檔案,他是使用apache的mime type相容格式,在FC4的/etc/mime.types有一個還頗完整的,但還是需要自行加入一些只有win32才有的二進位檔副檔名
- –eol-from-mime-type
For files that don’t have the kb expansion mode but have a known mime type, set the eol-style based on the mime type.
請記住在轉換cvsnt時,-kb的旗標一點用也沒有,完全從mime type的檔案來,因此這個旗標要用,更重要的是 mime type的檔案種類更是要齊全。
最終所使用的指令如下:
cvs2svn --use-cvs --encoding=UTF-8 --encoding=Big5 \
--mime-types=/etc/mime.types --eol-from-mime-type \
--force-branch=arelease --dumpfile=fooall /var/cvs
接著就需要建立subversion的repository,然後把轉出的dump file匯入subversion的repository中。我選用的repository的layout是類似這樣:
/
calc/
trunk/
tags/
branches/
calendar/
trunk/
tags/
branches/
spreadsheet/
trunk/
tags/
branches/
因此我必須把之前在cvsnt的每個project都轉成獨立的檔案,然後一個一個匯進去。
假設/var/repos是我們放置repository的地方,首先我們先建立初始的repository。
svnadmin create Project
切換到其他的目錄,下載剛建立的repository。
svn co -N https://localhost/repos/Project
cd Project
mkdir fooall
svn add fooall
svn ci -m 'preparing for fooall migration' fooall
然後就可以把剛剛轉好的dump file匯入subversion中。
svnadmin load --parent-dir fooall/ /var/repos/Project < /tmp/fooall
這是因為dump出來的東西會自動區分成trunk,tags,branches這樣的layout,因此我們必須在匯入的時候從fooall這個目錄之後進行,就得使用上述的指令。詳細的可參考Apache的網頁他們也有轉換的經驗。
最後在Client端把剛剛匯入的程式碼check out,作嚴格的測試,若沒有問題那麼其他的project就可以一樣畫葫蘆。
Categories: 軟體系統
No Comments »

No Responses to “CVSNT轉到Subversion”
Care to comment?