CVS => SVN으로 이사하기(cvs2svn) 개발관련

엠파스 블로그에서 이글루스로 이사하고는 처음 올리는 포스팅 같다..
한동안 너무 바쁘기도 했고..  뭐 핑계지만..

여튼 개인적으로는 이미 버전관리 툴을 svn으로 사용하고 있지만 회사에서 사용하는 부분은 아직 좀 덜 익숙한 것도 있고 기존의 프로젝트들이 모두 cvs로 이미 해 오고 있는 터라 이사하기가 힘들어서 아직까지는 cvs 를 쓰고 있었다.
그러나 cvs의 단점들이 자꾸 보여서 이번 기회에 기존 버전관리 내역까지 svn으로 옮기려고 검색을 하다가 찾은 것이 python으로 만들어진 cvs2svn이다.

참고로 현재 내가 쓰는 SVN은 1.6.2버전(SlikSvn:tag/1.6.2@37679)이고 fs_type은 bdb를 쓰고 있다.
그리고 변환 대상 cvs는 cvsnt이고 한글 파일명이 존재한다.(하다못해 사용자명도 한글로 쓰고 있었음.)

python은 현재 이 글을 쓰는 중에 최신 버전이 3.1 버전인데 어디서던가 cvs2svn은 2.x 버전까지만 사용 가능하다고 들어서(확실치는 않음.  추가로 확인해봐야 함) 2.x의 최신버전인 2.6.2 버전을 설치했다.(설치 프로그램은 여기)

cvs2svn은 현재도 계속 개발되는 프로그램으로 이 글 작성시 최신인 2.2.0 버전을 받아서 설치했다.(위치는 여기)
python을 먼저 설치한 뒤 압축 푼 cvs2svn의 setup.py를 실행하면 python 설치위치의 scripts 에 cvs2svn 파일이 생성된다.
NT의 경우 실행의 편의성을 위해 확장자 .py를 붙여서 변경했다.

이제 작업 준비는 끝났는데..
작업 전 cvs2svn 사이트에서 개략적인 내용을 읽어보니 cvsnt는 공식적으로 지원 안한단다.-.-;;
물론 cvs가 원래 *nix용이고 cvsnt가 좀 다르다는 건 알고 있었지만 아예 공식지원은 하질 않는다니..
그나마 다행인게 아예 안되는 건 아니고 안되도 책임 못 진다 수준인거 같아서 해보기로 했다.

나는 다음의 순서로 작업을 진행하였다.


1. SVN 저장소 만들기
저장소는 cvs2svn작업 시 만들게 할 수도 있으나 나는 미리 만들고 작업했다.
다음과 같은 방식으로 만들었다.(이 경우는 bdb 사용함.)
svnadmin create --fs-type bdb E:\Repository\SVN\intranet

2. cvs2svn 작업
작업 대상 cvs는 cvs의 해당 프로젝트만 필요한게 아니라 CVSROOT 폴더도 필요하다.  따라서 CVSROOT가 들어가도록 상위폴더부터 존재해야 한다.
내가 작업했던 경우는 svn의 위치는 E:\Repository\SVN\intranet 이고 cvs는 N:\Web\intranet이다.
따라서 다음과 같이 실행하였다.
cvs2svn.py --existing-svnrepos --encoding=cp949 -s E:\Repository\SVN\intranet N:\Web\intranet
cvs.exe 프로그램이 있으면 --use-cvs 옵션을 사용하여 cvs를 이용해서 뽑아낼 수 있다.
한글이 사용되므로 --encoding=cp949 옵션으로 한글처리를 했다.

총 16개 단계를 거쳐서 실행되는데 아래 내용과 같이 대부분의 시간은 마지막 16번째에 소요된다.  앞에서 분석한 내용에 따라 실제로 svn에 commit 하는 작업이다.
앞에 처리단계에서 파일별로 commit 된 내역을 모아 svn에서의 commit 목록(Revision)으로 묶어주는데 이 갯수가 몇 개냐에 따라서 처리시간이 천차만별이다.
약 1600여개정도 생긴 cvs의 경우 처리시간이 약 1400여초(20분 넘게) 걸렸다.  그러나 성능 좋은 PC에서 실행했음에도 불구하고(Core Quad Q9550, 6GB Ram) 시간은 오래 걸리지만 별로 cpu 점유율은 높지 않았다.

마지막에 나오는 처리 종합 페이지 내용은 아래와 같다

cvs2svn Statistics:
------------------
Total CVS Files:               859
Total CVS Revisions:          1976
Total CVS Branches:              0
Total CVS Tags:               2437
Total Unique Tags:               3
Total Unique Branches:           0
CVS Repos Size in KB:        77730
Total SVN Commits:             390
First Revision Date:    Mon Feb 23 11:54:43 2009
Last Revision Date:     Mon Jun 15 19:59:24 2009
------------------
Timings (seconds):
------------------
  1.8   pass1    CollectRevsPass
  0.1   pass2    CleanMetadataPass
  0.0   pass3    CollateSymbolsPass
  0.3   pass4    FilterSymbolsPass
  0.0   pass5    SortRevisionSummaryPass
  0.0   pass6    SortSymbolSummaryPass
  0.3   pass7    InitializeChangesetsPass
  0.2   pass8    BreakRevisionChangesetCyclesPass
  0.2   pass9    RevisionTopologicalSortPass
  0.1   pass10   BreakSymbolChangesetCyclesPass
  0.2   pass11   BreakAllChangesetCyclesPass
  0.3   pass12   TopologicalSortPass
  0.5   pass13   CreateRevsPass
  0.0   pass14   SortSymbolsPass
  0.0   pass15   IndexSymbolsPass
610.5   pass16   OutputPass
614.5   total

이 경우는 Revision 390개 생겼을 경우이다.

※ 추가사항
cvs.exe와 sort.exe와 같은 프로그램을 작업 폴더에 놓고 작업하는 것이 낫다.
--use-cvs를 쓸 경우 cvs가 설치 안되어 있을 경우도 작업 가능하고 또 일부 os에서는 os 자체의 sort.exe가 문제가 생기는 경우도 있기 때문이다.
cvs2svn_helpers.zip

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://hanavy.egloos.com/tb/9997056 [도움말]

덧글

댓글 입력 영역


메모장