친구와 함께 사용하는 Repository 를 옮길일이 발생했다.

원래는 내 피시에서 세팅해서 사용했지만 요즘 이사문제로 잠시 다른집에 얹혀 사는 입장에서

서버까지 돌려놓을수 없어서 친구에게 옮기기로 결정했고 단순히 Repository 폴더를 통째로 압축해서 보내줬다.

예전에 CVS 를 그렇게 옮겨 보았고 SVN 도 별다르게 틀리지 않을거라는 예상에.....

하지만 친구로부터 온 문자 때문에 이번에는 SVN 의 Repository 백업과 복구에 대해서 알아보았다.

SVN 의 Repository 의 백업은 여러가지가 있는것 같다.

그냥 무식하게 폴더를 통째로 백업(hardcopy) 해 놓는 방법도 그중에 하나이긴하지만 백업하는 타이밍에 데이터가 수정될 경우 문제가 발생하므로 서버를 내려놓고 백업을 하던가 다음 명령어로 백업을 할 수 있다.

svnadmin hotcopy path/to/repository path/to/backup --clean-logs

뭐..이건 SVN help 를 통해서 찾은내용이고 웹에 떠도는 내용을 토대로 실제 백업과 복구를 해보았다.

svnadmin help 명령어를 사용하면 hotcopy 이외에 여러가지 명령어가 나오는데 그중에

dump 와 load 명령어를 사용하면 된다.

* dump
- 특정 프로젝트를 백업하는 명령어
- $ svnadmin help dump
┌────────────────────────────────────────
│ dump: 사용법: svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]
│ 파일 시스템의 내용을 stdout 으로 포터블한 형식의 'dumpfile'로 적재하며,
│ stderr로 피드백을 보냅니다. 리비젼 LOWER rev 부터 UPPER rev 까지
│ 적재합니다. 주어진 리비젼이 없다면, 모든 리비젼 트리를 적재합니다.
│ --incremental 옵션을 사용한다면, 모든 내용이 아닌 이전 버젼과의 차이만 적재됩니다.
│ 옵션:
│  -r [--revision] arg      : 리비젼 넘버 ARG ( 또는 X:Y 범위 )를 지정합니다
│  --incremental            : incremental 적재를 합니다.
│  --deltas                 : 적재된 결과물에 deltas를 사용합니다
│  -q [--quiet]             : stderr 에 대한 진행사항이 (오류에 한해서) 없습니다

└────────────────────────────────────────

* load
- 특정 프로젝트를 복구 하는 명령어
- $ svnadmin help load
┌────────────────────────────────────────
│ load: 사용법: svnadmin load REPOS_PATH
│ stdin 으로 'dumpfile' 형식의 스트림을 읽어들여, 새로운 리비젼을
│ 저장소의 파일시스템으로 커밋합니다. 이전에 저장소가
│ 비어있었다면, 기본적으로 그것의 UUID 가 스트림에 지정된
│ 한가지로 변경될것입니다. 진행 피드백은 stdout 으로 전송됩니다.
│ 옵션:
│   -q [--quiet]             : stderr 에 대한 진행사항이 (오류에 한해서) 없습니다
│   --ignore-uuid            : 스트림에 어떤 repos UUID가 발견되어도 무시합니다
│   --force-uuid             : 만약 있다면, repos UUID 를 스트림에서 발견된 것에 설정합니다,
│   --use-pre-commit-hook    : 리비전을 새로이 커밋하기 전 post-commit 훅을 호출합니다.
│   --use-post-commit-hook   : 리비전을 새로이 커밋한 뒤 post-commit 훅을 호출합니다.
│   --parent-dir arg         : 저장소의 지정된 디렉토리에 로드합니다

└────────────────────────────────────────

+ Recent posts