CVSNT轉到Subversion

ilmare| May 25, 2007 4:33 pm

CVSNT算是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就可以一樣畫葫蘆。

No Responses to “CVSNT轉到Subversion”

Care to comment?

*
To prove you're a person (not a spam script), type the security text shown in the picture. Click here to regenerate some new text.
Click to hear an audio file of the anti-spam word