LukeHan 의 잡다한 기술 블로그

svn 에서 git 으로 코드 이전하기 본문

개발/Git

svn 에서 git 으로 코드 이전하기

LukeHan1128 2022. 7. 4. 20:00
반응형

기존 svn 저장소에 있는 코드를 git 으로 이전할 필요가 있어 아래와 같이 진행하게 되었다.

 

이전 작업자가 commit log 정보를 유지하지 않아 기존 것을 사용할 수 없는 상태여서

아래와 같이 문서를 작성하게 되었다.

 

 

 

 

준비

svn to git migration 진행을 위해 아래의 두 프로그램이 사전설치 되어 있어야 한다.

 

 

사전 설치 프로그램

  • java
  • git
  • svn

 

 

Download

 

 

java -jar svn-migration-scripts.jar verify

migration script 를 다운 받았다면 위와 같이 입력하여 migration 이 가능한지 확인한다.

 

 

Git: ERROR: Unable to determine version.
Subversion: ERROR: Unable to determine version.

만약 위와 같이 나온다면 git 혹은 svn 이 설치되지 않은 것이니 설치한다.

 

 

 

 

svn 으로 부터 사용자 정보 추출

기존 commiit history 를 이전하려면 svn 저장소로 부터 author 정보를 추출해야 한다.

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

{username} 에는 svn 계정 이름, {passwd} 에는 비밀번호를 입력한다.

 

 

 

 

aaa = aaa <aaa@mycompany.com>
bbb = bbb <bbb@mycompany.com>

authors.txt 파일을 확인하면 위와 같은 형식으로 나타날 것이다.

 

 

 

 

aaa = Hong Kil Dong <mrhong@ylland.net>
bbb = Mazinger Z  <mz@ylland.net>

왼쪽은 svn 이름, 오른쪽은 git 이름과 이메일 주소이다.

오른쪽 정보를 git 사용자 정보에 맞게 변경 적용한다.

 

svn 사용자인 aaa의 이름은 홍길동이고, 이메일 주소는 mrhong@ylland.net이다.

 

 

 

 

svn 에서 git 으로 소스코드 이전

git svn clone --stdlayout --authors-file=authors.txt svn://svn.example.com/project --username {username} {directory}

위와 같이 입력하여 svn 저장소를 git 저장소로 다운로드 받는다.

이 때 앞에서 만든 authors.txt 를 사용하여 사용자 정보를 mapping 해 준다.

 

{username}은 svn 저장소 이름, {directory}는 이전될 git 로컬 저장소이다.

기존 원격 svn 저장소에 있던 코드들은 {directory}안으로 저장될 것이다.

 

만일 svn 저장소가 표준 구조 (branches, tags, trunk)가 아니라면 --stdlayout 옵션을 빼던가, 혹은 --trunk=/dir1 --branches=/dir2 -- tags=/dir3 등으로 직접 지정해줘야 한다.

 

 

 

 

svn 설정 제거

clone 이 완료되었다면 기존 svn 연결을 해제해야 한다.

만약 표준 구조로 다운받지 않았다면 branches 나 tag 의 clean 에 실패할 수 있다.

 

[svn-remote "svn"]
    url = svn://svn.example.com/project
    branches = 
    tags =

{directory}/.git/config 파일을 연 후 svn-remote 항목의 branches 와 tags 를 위와 같이 변경 적용한다.

 

 

 

 

cd {directory}
java -Dfile.encoding=utf-8 -jar ../svn-migration-scripts.jar clean-git --force

설정 정보를 변경 적용하였다면, 위와 같이 입력하여 연결 해제를 진행한다.

 

 

 

 

git 저장소에 push 하기

앞의 설정 정보가 완료되었다면 svn commit history 가 git 의 기본 branch 인 master 에 commit 되어 있을 것이다.

이제 github 등의 git 저장소에 이전한 내용을 push 하면 된다.

 

git remote add origin http://{username}@git.example.com/project
git push origin master

원격지에 push 되었는지 확인한다.

 

 

 

 

참고

반응형
Comments