본문 바로가기

개발자 기본 소양

Subversion에서 특정 프로젝트만 덤프하고 복원하기 svndumpfilter


서브버전에 한가지 저장소를 열어 여러 프로젝트를 관리하고 있는 경우가 많을 것이다. 이 때에 프로젝트 하나가 독립을 선언한다면 이를 위해서 덤프를 제공하는 방법을 고민해봐야할 것 같다. 최근에 이런 요구가 있어서 좀 찾아봤는데, svndumpfilter로 해결할 수 있음을 알게 되었다. 약간의 삽질도 있었고 해서 정리해둔다.

◆ 저장소로부터 원하는 폴더만 덤프하기

우선, 저장소 전체에 대한 덤프를 받아둔다. 덤프된 파일을 all.dump라고 하자. 이 all.dump에서 원하는 svndumpfilter를 이용해 폴더만을 뽑아낼 수 있는데, 저장소의 chonga/source를 가져온다고 가정하고 아래 예제를 보자.
cat prj.dump |svndumpfilter --drop-empty-revs --renumber-revs include chonga/source/ > chonga-source.dump

혹은, 간혹 덤프필터에 문제가 생기는 경우가 있어 다른 프로젝트를 제외(exclude)해서 원하는 결과를 얻을 수도 있다.
cat all.dump |svndumpfilter --drop-empty-revs --renumber-revs exclude teria COOO gameTestPage Messenger test deo lus > chonga.dump

부연해서 --drop-empty-revs --renumber-revs 옵션을 사용하지 않으면 기존의 리비전에서 스킵된 부분을 log를 더미로 padding하게된다.

◆ 덤프된 파일을 원하는 폴더에 로드하기

이렇게 덤프된 파일은 기존 저장소에 추가로 리비전을 모두 넣어주면서 복원할 수 있다. parent dir를 지정하지 않으면 루트 패스로 올리게 된다.
svn load "저장소 URL" --parent-dir "원하는 폴더 위치" < chonga_source.dump

주의할 점은 위에서 하위 디렉토리의 소스만을 지정한 경우(chonga/source와 같이)가 있는데, 이 경우에는 상위폴더가 로딩될 대상 폴터에 반드시 존재하고 있어야한다. 정확히 지정해주지 않으면 파일을 찾지 못한다는 에러가 날 수 있다. 약간 헷깔릴 수 있는 부분인데, myproject라는 곳에 chonga/source를 덤프받아서 옮기려고 한다면, 대상 저장소에 chonga까지는 생성이 되어 있어야한다.
svn mkdir "저장소URL/myproject/chonga" -m "dump"
svn load "저장소URL" --parent-dir myproject < chonga_source.dump

● 참고 사이트
http://whynotwiki.com/Subversion_/_Dump_and_loading
http://whynotwiki.com/How_I_moved_my_code_repository_to_Google_Code

'개발자 기본 소양' 카테고리의 다른 글

VIM을 사용하자  (0) 2011.03.16
메크로 포함한 gcc옵션 -E  (0) 2011.01.11
개발디버깅 명령어 ( nm , ldd , lsof )  (1) 2009.09.26
MIME (Multipurpose Internet Mail Extensions)  (1) 2009.06.05
RF 기초 강의실  (0) 2009.03.23