형상관리

svn2git을 이용해서 SVN에서 Git(bitbucket)으로 마이그레이션 하기

Jundol 2018. 12. 24. 15:02

svn2git 사용기

난 자칭 git 찬양론자 예찬론자 무한git교 다.

회사내에서는 svn을 주로 사용하다가 git으로 점점 변화하는 추세이다.

신규프로젝트의 경우 대부분 git을 이용해서 시작한다.

하지만 기존 프로젝트들의 경우 svn을 계속해서 이용했는데 이는 변화를 두려워하는 동굴속의 이들도 한 몫을 하고있었다.

기존의 이력을 버리고 옮겨야된다는 두려움(변명) 때문에 깃으로 옮기지 못한다는... 


그래서 내가 내 담당 프로젝트들만이라도 svn 커밋 이력을 가지고 통채로 git으로 마이그레이션을 하고자 했다.


svn2git를 윈도우에서 그대로 사용하려했으나 몇시간의 삽질끝에 빡쳐서 virtualbox에 리눅스 올렸다.


1. 리눅스 설치 ubuntu 16.04 LTS 설치

Error: piix4_smbus base address uninitialized

Solution: Turn off the option "Enable Nested Paging" in the VirtualBox configuration under Settings->System->Acceleration.

This allowed me to get Ubuntu running with the desktop.


2. putty를 이용 접속하기 위해 vm 네트워크 포트포워딩


3. openssh 설치 

프로그램 확인

dpkg -l | grep openssh

클라이언트밖에 없을경우 openssh-server가 필요함

apt-get install openssh-server

ssh 실행

service ssh start

ssh 항목이 있는지 확인

service --status-all | grep +

몇번 포트로 되어있는지 확인

netstat -antp


3. putty 를 이용 리눅스 접속

host ip 에 본인의 로컬 PC IP를 입력 후 접속


4. 편하게 쓰기 위해 ubuntu vi 에디터 설정

vim 설치

apt-get install vim

사용자 계정의 홈 디렉터리 하위에 설정파일을 생성하여 설정파일 기재


cd ~

vim .vimrc

================================

set syntax on

set nu

set tabstop=4

set autoindent

set ruler

set showcmd

set title

set wmnu

set showmatch

set nocompatible

=================================

설정 저장 후 source 명령어로 .vimrc 파일을 적용한다.

source .vimrc



gem, jdk, git, ruby, svn2git 설치

5. gem 설치

apt-get install gem


6. jdk 설치

java 확인 (미설치시 설치되어있지않다고 뜸)

java -version

jdk (java) 설치

apt-get install default-jdk

java -version

(필자의경우 1.8로 설치되어있는것을 확인함)


7. git 설치

add-apt-repository ppa:git-core/ppa

apt-get update && sudo apt-get dist-upgrade

apt-get install git-core

git version

git version 2.20.1


8. ruby 설치

apt-get install ruby-full


9. svn2git 설치

gem install svn2git


10. 여기서부터 미친듯이 진짜로 엄청 중요하다. 기존 svn프로젝트에서 커밋 author 리스트를 추출해서 별도의 authors.txt 로 만들어놔야 svn history checkout 혹은 git push 할때 오류가 나지 않는다.

mkdir -p /home/svn/repos

cd /home/svn/repos

wget을 이용하여 변환도구를 다운로드 받는다.

wget https://bitbucket.org/atlassian/svn-migration-scripts/downloads/svn-migration-scripts.jar

정상 다운로드 확인

java -jar svn-migration-scripts.jar verify

svn author 정보 추출

java -jar svn-migration-scripts.jar authors http://svn.example.com/project {username} {passwd} > authors.txt

여기서 username 과 passwd 는 svn 계정정보로 변경한다.

mkdir ~/.svn2git

cp authors.txt ~/.svn2git/authors.txt

필자의 경우 svn사용시 브랜치와 태그를 사용하지 않았다. 하여 svn 프로젝트를 local git으로 이관하는 명령어 사용 시 옵션으로 브랜치와 태그를 가져오지않는다는 옵션을 사용했다.

svn2git https://svn.example.com/svn/myproject --nobranches --notags --authors ~/.svn2git/authors.txt

위 명령어 사용시 리비전넘버가 1부터 최근 리비전넘버까지 쭉쭉 올라가면서 git으로 가져오는게 보인다.

중간에 멈추거나 git svn fetch 에러 같은게 발생하면 대부분 authors 가 맞지않아서 발생하는 문제다.

authors 정보를 확인해서 수정한다.

리비전넘버가 끝까지왔고 에러를 뿜으면서 중지되는데 필자의경우 git gc 에러라고 보이며 멈추었다.

여기까지만되도 상관없는것으로 보인다.

git remote add origin git@gitlab.example.com:group/myproject.git

git push -u origin master

퍼센트가 올라가면서 git master 에 푸시되는게 보인다.

여기까지되면 svn의 모든 history 를 git으로 이관하는게 완료되었다.

만약 막히는 부분이 있다면 아래 참고사이트 목록을 참고하여 열심히 삽질해보자!!



참고 사이트

1. vmware 에러 https://askubuntu.com/questions/298290/smbus-bios-error-while-booting-ubuntu-in-virtualbox

2. openssh 설치 https://jimnong.tistory.com/713

3. virtualbox vm 포트포워딩 http://hahaite.tistory.com/283

4. vi 에디터 설정 http://freestrokes.tistory.com/40

5. jdk 설치 https://m.blog.naver.com/opusk/220985259485

6. git 설치 https://thisblogbusy.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-1604%EC%97%90%EC%84%9C-GIT-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

7. ruby 설치 https://www.ruby-lang.org/ko/documentation/installation/

8. svn 계정정보 추출 http://lux.cuenet.kr/21

9. svn2git 사용법 https://www.lesstif.com/pages/viewpage.action?pageId=23757066