만약에 2개의 장소에서 독립적인 지역 저장소(local repositories)를
하나의 중앙 서버에서 합쳐서 서비스를 하려고 한다는 상황에 적절한 내용

--- 2011.05.11 추가
병합된 내용을 보니 날짜 / 시간별로 revision이 맞물려 들어간다.
---

# svnadmin load --help
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         : 저장소의 지정된 디렉토리에 로드합니다

# svnadmin dump --help
dump: 사용법: svnadmin dump REPOS_PATH [-r LOWER[:UPPER] [--incremental]]

파일 시스템의 내용을 stdout으로 포터블한 형식의 'dumpfile'로 출력하며,
stderr로 피드백을 보냅니다. 리비젼 LOWER부터 UPPER까지 출력합니다.
주어진 리비젼이 없다면, 모든 리비젼 트리를 적재합니다. LOWER만 주어졌다면,
LOWER 값에 해당하는 리비전만 출력합니다.
--incremental 옵션을 사용한다면, 출력되는 첫번째 리비전에는 해당
리비전에서 바뀐 경로에 대한 것만 기술될 것이며, 그렇지 않은 경우에는
해당 리비전에 존재하는 모든 경로가 출력됩니다.
(이 옵션의 사용여부에 상관없이 출력되는 두번째 이후의 리비전에는 해당
리비전에 바뀐 내용이 있다면, 그 경로의 내용만 출력됩니다)

옵션:
  -r [--revision] ARG      : 리비젼 넘버 ARG ( 또는 X:Y 범위 )를 지정합니다
  --incremental            : incremental 적재를 합니다.
  --deltas                 : 적재된 결과물에 deltas를 사용합니다
  -q [--quiet]             : stderr 에 대한 진행사항이 (오류에 한해서) 없습니다

$ svnadmin dump repo1 > a1.d
$ svnadmin dump repo2 > a2.d
$ svnadmin create new
$ svn mkdir file:///.../new a1
$ svnadmin load new --parent-dir a1 < a1.d
$ svn mkdir file:///.../new a2
$ svnadmin load new --parent-dir a2 < a2.d 

[링크 : http://spyced.blogspot.com/2007/09/merging-two-subversion-repositories.html] 

간단하게 요약하자면
repo1 의 내용을 a1.d 에 
repo2 의 내용을 a2.d 에 파일로 저장하고

new라는 새로운 저장소를 만들어
그 안에 repo1은 a1 이라는 상위 디렉토리를 넣어주고
repo2는 a2 라는 상위 디렉토리를 넣어준다.

만약, 특별한 상위 디렉토리 없이 전부를 넣어주고 싶다면
--parent-dir /
이라고 해주면 목적지 저장소의 / 에 전부 넣어지게 된다.
(실험해보진 않았지만 parent는 저장소의 지정된 디렉토리 이므로,
엄밀하게는 미리 디렉토리를 생성해주고 그 안으로 넣어도록 지정이 가능할 것으로 보인다.)

[링크 : http://geekswithblogs.net/kariemali/archive/2009/06/02/how-to-merge-two-svn-repositories.aspx]
[링크 : http://stackoverflow.com/questions/267256/combining-multiple-svn-repositories-into-one]
Posted by 구차니
개소리 왈왈/독서2010. 11. 18. 16:25
너무 단순한 표지와 제목으로 인해 -_-
처음에는 읽어볼 생각도 안하다가 cvs에서 svn으로 갈아타려고 마음을 먹은지라
한번 읽어 볼까? 라는 가벼운 마음에 집어들었다가

완전 제대로 득템을 한 느낌을 받게해준 책!

subversion의 사용방법과 모호한 내용을 시원하게 긁어주는 책이다.
(일단 svn은 berkelyDB를 사용하는게 좋다는데 DB는 선천적 알레르기가 ㅠ.ㅠ)

2010/11/18 - [프로그램 사용/CVS / SVN / GIT] - svn export 와 checkout의 차이점
2010/11/18 - [프로그램 사용/CVS / SVN / GIT] - svn blame

Posted by 구차니
우분투에서 apache2는 기본값으로 www-data:www-data 유저/그룹으로 실행된다.

보안이랑은 좀 거리가 멀어지는 느낌이지만, www-data 유저를 shadow 그룹으로 넣고
<Location /svn/repos1>
        DAV svn
        SVNPath /home/svn/repos1

        AuthPAM_Enabled on
        AuthType Basic
        AuthName "Subversion Repository"
        AuthUserFile /etc/shadow
        Require group www-data
        Require valid-user
</Location>
위와 같이 설정을 해주니, shadow의 로그인 정보를 이용하여 svn에 접근할수 있게 되었다.


'프로그램 사용 > Version Control' 카테고리의 다른 글

svn export 와 checkout의 차이점  (0) 2010.11.18
svn blame  (4) 2010.11.18
Apache + SVN on Ubuntu 10.04  (0) 2010.11.03
visualSVN  (0) 2010.09.09
TortoiseSVN tag/branch = copy  (2) 2010.04.30
Posted by 구차니