일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ubuntu
- DATABASE
- 아틀라시안
- node
- 스크립트
- Linux
- hamonikr
- DB
- 우분투
- 하모니카
- 파이썬
- 설치
- PostgreSQL
- 노드
- 데이터베이스
- javascript
- install
- python
- Windows
- 3.0
- JS
- 자바
- postgres
- Atlassian
- 리눅스
- 설정
- script
- java
- 윈도우
- 자바스크립트
- Today
- Total
LukeHan 의 잡다한 기술 블로그
svn 에서 git 으로 코드 이전하기 본문
기존 svn 저장소에 있는 코드를 git 으로 이전할 필요가 있어 아래와 같이 진행하게 되었다.
이전 작업자가 commit log 정보를 유지하지 않아 기존 것을 사용할 수 없는 상태여서
아래와 같이 문서를 작성하게 되었다.
준비
svn to git migration 진행을 위해 아래의 두 프로그램이 사전설치 되어 있어야 한다.
사전 설치 프로그램
- java
- git
- svn
Download
- migration script : https://bitbucket.org/atlassian/svn-migration-scripts/downloads
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 되었는지 확인한다.
참고