서브버전 저장소 통합하기

  • Post Author:
  • Post Category:
  • Post Comments:1 Comment
  • Post last modified:February 8, 2020

상황은 이렇다.

서버 소스코드는 http://mycompany.com/svn/server 에 위치한 SVN 저장소에 있다. 클라이언트 소스코드는 이와 달리 http://mycompany.com/svn/client 에 있는데 이 둘을 하나로 통합하려 한다.

우선 클라이언트 저장소의 폴더 구조를 보자면 다음과 같다.

/trunk
 - /trunk/src
 - /trunk/src/client
 - /trunk/vendor
/tags
/branches
 - /branches/my-branch-001
 - /branches/my-branch-002

서버 저장소의 폴더 구조는 이보다 단순해서 다음과 같다.

/trunk
 - /trunk/src
 - /trunk/src/server
/tags
/branches

폴더 구조를 분석해보니 서버 저장소를 클라이언트 저장소에 통합하여 다음과 같이 편성하면 좋겠다 싶다.

/trunk
 - /trunk/src
 - /trunk/src/client
 - /trunk/src/server
 - /trunk/vendor
/tags
/branches
 - /branches/my-branch-001
 - /branches/my-branch-002

이렇게 편성하기에 앞서 SVN 저장소가 물리 디스크에 다음과 같은 폴더 구조로 배치되었다고 가정한다.

  • 클라이언트: D:\Repository\Server
  • 서버: D:\Repository\Client

이러한 상황에서 두 저장소를 원하는 대로 통합하려면 다음과 같은 절차를 따른다.

  1. 명령 줄(CMD.EXE)에서
    CD /D D:\Repository
  2. 서버 저장소 덤프 뜨기. 이때 /trunk/src/server만 덤프한다.
    svnadmin dump Server | svndumpfilter --drop-empty-revs --renumber-revs include trunk/src/server > Server.dump
  3. 덤프 뜬 내용물을 클라이언트 저장소에 통합하기
    svnadmin load Client --parent-dir=trunk/src/server < Server.dump

그리 어려운 부분은 없지만 중간에 –drop-empty-revs –renumber-revs 스위치가 무엇인지는 직관적이지 않다. 서버 저장소 중 일부만 가져다 복원한다. 그런데 기존 서버 저장소에 /trunk/src/empty라는 빈 폴더가 있다면 이 저장소는 복원되지 않는다. 그래서 /trunk/src/server 폴더와 상관이 없는 리비전이 있기 마련이다. 새로운 저장소에서 이러한 로그는 불필요하기 때문에 이전 대상에서 제외할 경우가 많은데 이 때 사용하는 스위치이다.

참고 문서

Buy me a coffeeBuy me a coffee

최 재훈

Kubernetes, DevSecOps, Golang, 지속적인 통합 등 다양한 주제에 관심이 많다.