서브버전에 한가지 저장소를 열어 여러 프로젝트를 관리하고 있는 경우가 많을 것이다. 이 때에 프로젝트 하나가 독립을 선언한다면 이를 위해서 덤프를 제공하는 방법을 고민해봐야할 것 같다. 최근에 이런 요구가 있어서 좀 찾아봤는데, 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
출처: http://astein.egloos.com/3619576

어제 회의를 하다보니 trac & svn을 제가 맡게 되었네요 -_-...

 그래서 처음 써 본 trac... 첫 번째 임무로 ticket property modify가 내려졌군요 :<

 * 새로운 ticket properties 추가

  1. conf/trac.ini를 열고, [ticket-custom] 필드를 수정한다.

  2. 좀 더 자세한 정보를 원한다면 http://trac.edgewall.org/wiki/TracTicketsCustomFields 를 참조하자.


 * 새로 추가한 ticket properties의 삭제

  1. conf/trac.ini에서 기존에 추가되어 있는 [ticket-custom] 필드를 삭제한다.

  2. 아파치 서버를 재시작하자. ( sudo /etc/init.d/apache2 restart )


 * 기존에 있는 ticket properties 삭제 (예를 들어 version)

  1. trac-admin help를 살펴보면, version이 있는 것을 찾을 수 있을 것이다.

  2. trac-admin (해당 디렉토리) version list 를 통해 어떤 항목들이 있는지 찾은 후, 

     trac-admin (해당 디렉토리) version remove 를 이용하여 모든 항목을 지운다.