GitNotes.36-5.md
본 문서는 Git Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

Section 36.5: svn2git 을 이용하여 SVN 에서 Git 으로 이주(migrate) 하기

svn2git 은 git 의 native SVN 지원 기능인 git-svn 에 대한 ruby wrapper 로써, Subversion 에서 Git 으로의 project 이주 (migrate) 및 history 유지 (trunk, tags, 그리고 branches 의 history 를 포함) 를 도와주는 도구이다.

예제

표준 구조 (예: 저장소의 root 레벨에 branches, tags, 그리고 trunk 가 존재하는) 를 사용하는 svn 저장소를 이주 (migrate) 시키는 예제:

$ svn2git http://svn.example.com/path/to/repo

표준 구조를 따르지 않는 svn 저장소를 이주 (migrate) 시키는 예제:

$ svn2git http://svn.example.com/path/to/repo --trunk trunk-dir --tags tags-dir --branches branches-dir

만약 branches, tags 나 trunk 를 이주시키지 않기를 원한다면 (혹은 해당 내용이 존재하지 않는다면) --notrunk, -- nobranches, 그리고 --notags 와 같은 옵션을 사용할 수 있다.

예를 들어, $ svn2git http://svn.example.com/path/to/repo --trunk trunk-dir --notags --nobranches 와 같이 실행한다면 trunk 에 대한 history 만 옮겨질 것이다.

새로운 저장소에서 필요로하는 저장공간을 최소화하기 위하여, 추가될 필요가 없지만 어쩌다 추가되었던 파일이나 디렉토리를 (예:빌드 디렉토리나 archive 등) 아래와 같이 제외시킬 수도 있다:

$ svn2git http://svn.example.com/path/to/repo --exclude build --exclude '.*\.zip$'

이주(migration) 작업 이후의 최직화

새로이 생성된 git 저장소에 이미 수천개의 커밋들 (혹은 그 이상) 이 존재하는 상황이라면, 원격 저장소에 push 하기 전에 사용되는 저장 공간을 최소화하길 원할 수 있을 것이다. 그러한 경우에는 아래와 같은 명령어를 사용할 수 있다:

$ git gc --aggressive

주의: 위 명령어는 대규모 저장소 (수만개의 커밋 혹은 수백 메가바이트 이상의 history를 가지는) 에서 실행시 몇시간 까지도 걸릴 수 있다.

[출처] https://books.goalkicker.com/GitBook/ (CC BY-SA)

반응형

+ Recent posts