SVN에서 특정 리비전을 제외한 모든 리비전 삭제

SVN은 참으로 유용한 도구임이 틀림이 없다. 특히 대단위 프로젝트나 협업을 꼭 필요로 하는 작업에서 그 진가가 더욱 빛이 난...다(?, 확실히 감은 오지만 "대단위", "협업을 꼭" 이런류의 프로젝트를 한것은 아니기에..)

나도 프로젝트를 진행을 해보면서 SVN쓰게 되었는데, 유용하게 쓰다가 한 가지 문제에 봉착했다. Project의 리비전의 몇천 단위를 육박하게 되고, 다루는 데이터가 프로그래밍 코드뿐만이 아니라 덩치큰 바이너리 데이터등도 포함이 되기 때문에 특정 데이터에 대한삭제와 추가의 커밋이 빈번히 일어난 해당 Project의 Repository(저장소) 크기가 상상이상으로 커져버렸다..

어느날 SVN 서버가 설치된 컴퓨터의 하드부족이 메세지가 떠서 확인해보니 특정 저장소의 용량만 20기가가 넘게 차지하고 있었다. 그 프로젝트의 경우는 이미 잔금(^-^) 처리까지 끝난 경우 였기에 최신 리비전만을 유지하고 이전의 지난 리비전에 대한 히스토리를 삭제 하고 싶었다.

관련 주제로 한참을(정말 한참..ㅠㅠ) 구글링을 하고나서 결국 방법을 하나 찾았는데,( 뭔가 맘에 들지 않는 방법입니다. 행여나 다른 방법을 아시는 분은 조언을.. ) svnadmin의 dump 명령어와 load명령어를 통해 최신 리비전을 dump받고 저장소를 날려버린다음에 다시 생성.. 그 뒤에 최신 리비전을 dump받은 파일을 다시 로드하는 방법이다. ( 사실 내가 원한 해법은 저장소는 그대로 유지한 상태에서 단순히 특정 범위의 리비전만 삭제 하는 방법이었다. )

아래는 내가 실제로 행한 방법이다.

1. svnadmin dump xxxxx_Proj -r Head > xxxxx_Proj.dump
   -> -r 옵션을 주지 않을 경우 모든 리비전에 대한 덤프가 생성된다. 여기서 나의 목적은 최신 리비전만을 남기고 모두 삭제되어있는 저장소를 새로 만드는 것이므로 -r 옵션과 head(최신 리비전을 의미) 옵션을 주었다.
2. xxxxx_Proj 저장소 삭제
3. svnadmin create xxxxx_Proj --fs-type bdb
   -> --fs-type 의 기본 값은 fsfs이다.( 파일시스템 형식 ) 나는 버클리db형식을 사용했기에 저런 옵션을 준것이지 필수 옵션은 아니다.
4. svnadmin load xxxxx_Proj --force-uuid < xxxxx_Proj.dump
   -> --force-uuid 옵션은 Dump당시의 리비전을 유지하는 옵션으로 Client에서 별도의 작업없이 그전과 동일하게 저장소를 이용할 수 있는 장점이 있다.
5. 완료, 테스트.


뱀다리 1. 만약 나와 같이 최신 리비전이 아니라 특정 리비전 범위만을 남기고 저장소를 유지하고 싶다면 위의 단계 1에서 dump 옵션 -r 값을 수정하면 된다. 예를 들어 리비전 999~1000까지를 Dump받으로면 -r 999:1000이 될테고 만약 1111번째 리비전만 dump받으려면 -r 1111이 될 것이다.

후..

 


출처 : http://ummae.tistory.com/archive/20080613

댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
제목 작성자 날짜
공대여자
공대여자
mins01
공대여자
공대여자
공대여자
공대여자