svn을 git으로 이전하는 방법

작업하기가 용이한 로컬 윈도우 환경으로 SVN 저장소를 git으로 이전하는 방법을 설명한다.

현재 작업하는 장비에 git 환경이 세팅되어 있지 않다면 GitLab 업무환경 구성가이드를 참고해서 환경 세팅부터 한다.

1. 마이그레이션 할 SVN 저장소를 준비

마이그레이션 할 저장소의 URL과 SVN 계정이 필요하다.

예를 들어 http://183.98.48.161/svn/vras를 예로 설명한다.

  1. 윈도우 탐색기를 이용해 작업할 폴더를 생성 e.g. D:/dev/git/vras
  2. 해당 폴더에서 마우스 오른쪽 클릭 후에 나오는 메뉴에서 git bash 클릭

2. SVN 저장소의 Log를 보면서, committers list를 준비

구글링하면 SVN 작업사본에서 쉘 스크립트 명령어를 이용해서 committer list를 추출하는 방법이 있지만, 윈도우에서는 추가작업이 필요하다.

그래서 윈도우에서는 TortoiseSVN을 가지고 설명한다.

  1. 윈도우 탐색기에서 마우스 오른쪽 클릭해서 나오는 컨텍스트에서 TortoiseSVN->Repo-Broswer 를 선택
  2. Repo-Broswer 주소창에 마이그레이션 할 SVN에 접속
  3. 접속한 트리의 root 에서 오른쪽 클릭해서 Show Log 선택
  4. Show Log 창에서 오른쪽 하단에 Statistics 버튼 클릭
  5. Statistics 창에서 Graph type을 Commits by author로 선택
  6. 그림과 같이 그래프가 나오면 오른쪽 범례에 author 가 나온다.
    1
  7. author에 나오는 ID를 다음의 [SVN USERNAME]에 사용한다.
  8. users.txt 파일을 생성하고 아래와 같이 내용을 작성한다.
wellstyle = youngjun seo <ace@gaeasoft.co.kr>
leeyh79 = younghee lee <leeyh79@gaeasoft.co.kr>
trajeta = youngjun seo <ace@gaeasoft.co.kr>
yjseo = youngjun seo <ace@gaeasoft.co.kr>

첫 줄을 예로 부연 설명을 하자면 wellstyle은 svn 계정, = 이후 값은 git 계정정보로 youngjun은 first name 이고 seo은 last name, ace@gaeasoft.co.kr은 계정이다. author 중에 퇴사한 사람도 있을 것이므로 그런 author는 현재 팀원 중에 한 명으로 대체한다. trajetaace@gaeasoft.co.kr 계정으로 대체한 경우이다.

3. git-svn으로 SVN 저장소를 git 저장소로 변환

가장 중요한 시점이다. 1번 작업에서 띄워 놓은 git bash 창에서 아래 명령어를 입력한다. 옵션 값들은 프로젝트에 적절하게 수정해서 입력한다.

git svn clone http://183.98.48.161/svn/vras --no-metadata -A users.txt -T src/server ./vras-server

주의할 부분은 trunk, branches, tags 경로이다. 샘플 프로젝트는 브랜치를 별도로 관리하지 않았기 때문에 trunk 밖에 없다. 이전에 필요한 것만 옵션에 넣어서 사용하면 된다. 잘 안되면 고생하지 말고 @ace 에게 문의하길 바란다. 아래 내용은 위에서 실행한 명령에 대한 설명이다.

git svn clone                   : SVN 서버에서 복제해서 git 저장소를 생성한다. 밑에서 설명하겠지만 clone = init + fetch 이다.
http://183.98.48.161/svn/vras   : 프로젝트 최상위 폴더. 통상적으로 이 밑에 trunk, branches, tags 폴더가 위치한다.
--no-metadata                   : git-SVN 연동을 위한 메타데이터를 생성하지 않는다. 마이그레이션을 목적으로 하므로 메타데이터를 생략하는 것.
-A users.txt                    : 3번에서 만든 committers list
-T trunk -b branches -t tags    : 트렁크, 브랜치, 태그 폴더명. 참고로 위에 표시된 것과 같은 표준 사양인 경우 --stdlayout 으로 대체 가능.
./vras-server                   : git 저장소가 만들어질 폴더이름

svn에서는 소스와 문서를 하나의 저장소에 관리했다면 git에서는 소스와 문서를 별도의 저장소에 분리하였다. 문서 저장소는 아래와 같이 생성함

git svn clone http://183.98.48.161/svn/vras --no-metadata -A users.txt -T doc ./vras-doc

4. 인내심을 가지고 기다린다

clone을 실행하면 command 창에 변환하는 파일명들이 출력된다. (출력되지 않으면 문제가 있는 것이므로 clone 명령 옵션을 잘 확인해 보라. 특히 trunk, branches, tags 경로가 잘못된 경우가 많을 것이다)

5. 브랜치와 태그 정리 (Optional)

브랜치와 태그를 정리하고 git 으로 이전하고 싶다면 http://koasing.tistory.com/246 링크에서 해당 부분을 참고해서 작업하자.

6. 저장소 재복사 (Optional)

더 깔끔하게 git으로 이전하고 싶다면 http://koasing.tistory.com/246 링크에서 해당 부분을 참고해서 작업하자.

7. SourceTree로 변환된 git 저장소 확인

변환된 git 저장소를 SourceTree에서 Clone / New -> Add Working Copy 로 불러와서 commit 이력을 확인한다.

8. 소스 프로젝트인 경우에 개발 툴로 확인 (Optional)

소스 프로젝트인 경우에 개발 툴로 소스를 임포트해서 빌드 및 테스트를 진행한다.

9. GitLab에서 Group 및 Project 생성

GitLab에서는 프로젝트별로 저장소가 생성된다. 따라서 2개의 프로젝트를 추가해야 하며 추가된 프로젝트는 그룹을 만들어서 해당 그룹으로 귀속시킨다.

그룹 및 프로젝트 생성하는 방법은 GitLab 매뉴얼을 참고한다.

  1. Group 생성
  2. Group Name : uplus-vras
  3. Project 생성
  4. 소스 Project : vras-server
  5. 문서 Project : vras-doc

10. SourceTree로 GitLab에 Push 하기

SourceTree에서 remote 저장소를 추가하고 해당 remote로 Push를 보내면 된다.

  1. remote 추가
  2. GitLab 프로젝트 저장소의 http URL을 복사해서 SourceTree의 New Remote에 등록
  3. remote로 저장소 Push
  4. GitLab에서 Push된 내용 확인

11. SourceTree에서 svn remote 삭제

SourceTree에서 Delete Subversion 으로 svn remote 정보 삭제

12. GitLab으로 형상관리 시작

이제 모든 작업을 마쳤으니 GitLab을 통해 형상관리 및 코드리뷰를 진행하자!!

참고자료