본 문서는 Git Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
Section 36.2: Atlassian 의 변환 툴을 이용하여 SVN 에서 Git 으로 이주(migrate) 하기
Atlassian 변환 유틸리티는 이곳 에서 받을 수 있다. 이 유틸리티는 Java 를 필요로 하므로, 변환을 수행하려고 하는 컴퓨터에 Java 실행환경 (JRE) 이 설치되어 있는지 확인이 필요하다.
java -jar svn-migration-scripts.jar
명령어 실행 시, 해당 컴퓨터에서 변환에 필요한 프로그램 중 빠진 부분이 있는지를 검사하여 준다.
세부적으로 이 명령어는 Git, subversion, 그리로 git-svn 이 설치되어 있는지를 확인한다. 또한 변환 작업이 대소문자를 구별하는 (case-sensitive) 파일시스템에서 수행되고 있눈지를 검사한다. 저장소를 손상시키지 않기 위하여, Git 으로의 변환은 대소문자를 구별하는 파일시스템에서 수행되어야 한다.
다음으로는, 작성자 (author) 정보 파일을 생성하여야 한다. Subversion 은 변경사항을 comitter 의 사용자 이름만을 가지고 추적(track) 하게 되어 있으나, Git 은 사용자를 구별하기 위하여 두가지의 정보를 사용하게 되어 있다: 실제 이름 (real name) 과 이메일 주소가 바로 그것이다. 아래 명령어는 subversion 사용자 이름을 git 에서의 대응 정보로 변환하는 매핑 파일을 생성한다:
java -jar svn-migration-scripts.jar authors <svn-repo> authors.txt
위 예제에서
이후 아래 명령어를 이용하여, SVN 저장소를 Git 저장소로 clone 할 수 있을 것이다:
git svn clone --stdlayout --authors-file=authors.txt <svn-repo> <git-repo-name>
- 위에 표시된
--stdlayout
옵션은 git 에게 해당 저장소가 trunk, branches, 그리고 tag 디렉토리로 이루어진 표준 SVN 구조를 사용하고 있다는 것을 알려주게 된다. 표준 구조를 따르지 않는 Subversion 저장소에 대해서는, trunk 디렉토리와 일부/전체에 대한 branch 디렉토리, 그리고 tags 디렉토리의 위치를 명시하여야 한다. 이 작업은 다음과 같은 예제를 참고한다:git svn clone --trunk=/trunk --branches=/branches --branches=/bugfixes --tags=/tags --authors- file=authors.txt <svn-repo> <git-repo-name> - 이 명령어는 저장소의 규모에 따라 몇 시간이 걸릴 수도 있다.
- 대규모 저장소의 경우 변환 시간을 단축하기 위해, subversion 을 호스팅하고 있는 서버에서 변환을 직접 수행하는 방법을 통해 네트웍상의 부하를 제거할 수 있다.
git svn clone
은 subversion branch 들을 (trunk 를 포함하여) 원격 branch로, subversion tags 들은 tags/ 라는 접두어가 붙은 원격 branch 로 import 한다. 이들을 실제 branch 와 tag 들로 변환하고자 한다면, 아래 명령어를 기술된 순서대로 Linux 머신에서 실행하도록 한다. 아래 명령어를 실행하고 나면, git branch -a
명령어는 올바른 branch 이름을 표시해 줄 것이며, git tag -l
명령어는 저장소의 tag 들을 표시해 줄 것이다.
git for-each-ref refs/remotes/origin/tags | cut -d / -f 5- | grep -v @ | while read tagname; do git tag $tagname origin/tags/$tagname; git branch -r -d origin/tags/$tagname; done
git for-each-ref refs/remotes | cut -d / -f 4- | grep -v @ | while read branchname; do git branch "$branchname" "refs/remotes/origin/$branchname"; git branch -r -d "origin/$branchname"; done
여기까지 수행하였다면 SVN 으로부터 Git 으로의 변환이 마무리 되었을 것이다. 로컬 저장소를 서버로 push 하고나면, SVN 으로부터의 version history 를 유지하면서도 Git 을 이용하여 개발을 진행할 수 있을 것이다.
[출처] https://books.goalkicker.com/GitBook/ (CC BY-SA)
'번역 > Git Notes for Professionals' 카테고리의 다른 글
36.4: Team Foundation Version Control (TFVC) 에서 Git 으로 이주(migrate) 하기 (0) | 2020.02.07 |
---|---|
36.3: Mercurial 에서 Git 으로 이주(migrate) 하기 (0) | 2020.02.07 |
36.1: SubGit (0) | 2020.02.06 |
35.2: filter-branch 로 정보를 작성자 정보와 동일하게 수정하기 (0) | 2020.02.05 |
35.1: filter-branch 로 커밋들의 작성자 정보 변경하기 (0) | 2020.02.04 |