Subversion에서 Git 호스팅 서비스로 이전하기

유행에 동참하고자(는 거짓말이고) 서브버전에서 깃으로 이전을 감행하고야 말았다. Git의 관리자 기능을 마지막으로 건드려본 지 오래라 처음부터 다시 공부하는 느낌이라 반나절이 꼬박 걸렸지만 결과는 좋다.

계획

Assembla라는 호스팅 서비스에 SVN 저장소를 두고 사용하던 참이다. 전반적인 이전 계획은 다음과 같다.

  1. 서브버전 저장소를 읽기 전용으로 돌린다. (Assembla가 기능을 제공한다)
  2. 로컬 컴퓨터에서 서브버전 저장소 전체(trunk, tags, branches)를 Git 저장소로 변환한다.
  3. 로컬에 만든 Git 저장소를 Assembla에 올린다.

말하자면 원격 SVN 저장소를 로컬에서 Git으로 변환해 다시 원격 Git 저장소로 옮기는 것이다.

난점

일반적인 경우라면 크게 어려운 작업은 아닌데 호스팅 서비스를 받다 보니 조금 더 귀찮긴 하다. 이를테면,

  1. SVN에서 쓰던 계정 이름이 사람마다 닉네임, 실제 이름, 이메일 주소 이렇게 세 가지로 나뉘었기 때문에 Git의 관례에 따라 이름 + 이메일 주소로 정리해야 한다.
  2. 서버 접속 권한이 없기 때문에 로컬 Git 저장소를 원격 서버에 직접 복사하는 건 못 한다.

시작!

서브버전 저장소를 읽기 전용으로

이렇게 하면 된다! 간단하다!

Git 저장소로 변환하기

Converting a Subversion repository to Git을 그대로 따라하면 된다. 부연 설명하자면,

  1. Retrieve a list of all Subversion committers에서는 1번 난점을 해결한다. SVN의 계정을 Git의 이름 + 이메일 관례에 맞춰 편집한다.
  2. Clone the Subversion repository using git-svn에서는 SVN 저장소에서 trunk, branches, tags를 모두 가져와 로컬 Git 저장소를 만든다.

  3. Convert svn:ignore properties to .gitignore에선 svn:ignore에 지정된 값을 가져와 그에 대응하는 .gitignore 파일을 만든다.

  4. Push repository to a bare git repository부터 Clean up branches and tags까지에선 로컬에 만든 Git 저장소를 다시 변환해 Git의 관례와 일치하는 구조로 새로운 Git 저장소를 만든다.

로컬 Git 저장소를 원격 저장소에 복사하기

우선 새로 만든 Git 저장소 폴더로 이동한다. Converting a Subversion repository to Git의 예제를 그대로 따라 했다면

cd ~/new-bare.git 

이제 로컬 저장소를 원격 저장소에 밀어 넣는다.

git push [email protected]:myproject.git --mirror

간단하다. 여기서 눈여겨 볼 부분은 --mirror 옵션이다. 이 옵션을 사용해야 master를 비롯한 모든 브랜치와 모든 태그가 고스란히 원격 저장소로 올라간다.

끝!

Advertisements

최 재훈

블로그, 페이스북, 트위터 고성능 서버 엔진, 데이터베이스, 지속적인 통합 등 다양한 주제에 관심이 많다.
Close Menu