svn2git을 이용해서 SVN에서 Git(bitbucket)으로 마이그레이션 하기
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