상황은 이렇다.
서버 소스코드는 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
이러한 상황에서 두 저장소를 원하는 대로 통합하려면 다음과 같은 절차를 따른다.
- 명령 줄(CMD.EXE)에서
CD /D D:\Repository
- 서버 저장소 덤프 뜨기. 이때
/trunk/src/server
만 덤프한다.svnadmin dump Server | svndumpfilter --drop-empty-revs --renumber-revs include trunk/src/server > Server.dump
- 덤프 뜬 내용물을 클라이언트 저장소에 통합하기
svnadmin load Client --parent-dir=trunk/src/server < Server.dump
그리 어려운 부분은 없지만 중간에 –drop-empty-revs –renumber-revs 스위치가 무엇인지는 직관적이지 않다. 서버 저장소 중 일부만 가져다 복원한다. 그런데 기존 서버 저장소에 /trunk/src/empty
라는 빈 폴더가 있다면 이 저장소는 복원되지 않는다. 그래서 /trunk/src/server
폴더와 상관이 없는 리비전이 있기 마련이다. 새로운 저장소에서 이러한 로그는 불필요하기 때문에 이전 대상에서 제외할 경우가 많은데 이 때 사용하는 스위치이다.
참고 문서
Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
[…] This post was mentioned on Twitter by lfvi, CHOI, Jaehoon. CHOI, Jaehoon said: New post: 서브버전 저장소 통합하기 http://bit.ly/h8DAHv […]