Subversion 저장소를 내보내고 가져 오는 방법은 무엇입니까?


82

나는 상업용 SVN 공급자를 사용하여 소스 코드를 저장하는 프로젝트를 막 마무리했습니다. 고객이 궁극적으로 선택한 웹 호스트에는 호스팅 패키지의 일부로 리포지토리가 포함되어 있으므로 프로젝트가 종료되었으므로 리포지토리를 웹 호스트로 재배치하고 상용 계정을 중단하고 싶습니다.

이 일을 어떻게할까요?

답변:


69

저장소를 이동하고 기록을 유지하려면 두 호스트 모두에서 파일 시스템 액세스가 필요합니다. 백엔드가 FSFS (최신 버전의 기본값) 인 경우 가장 간단한 해결책은 전체 저장소 폴더의 파일 시스템 복사본을 만드는 것입니다.

Berkley DB 백엔드가 있고 백엔드가 무엇인지 확실하지 않거나 SVN 버전 번호를 변경하는 경우 svnadmin을 사용하여 이전 저장소를 덤프하고 새 저장소에로드 할 수 있습니다. 저장소. 를 사용 svnadmin dump하면 새 시스템에 복사 할 수있는 단일 파일 백업이 제공됩니다. 그런 다음 새 (빈) 저장소를 만들고를 사용할 수 있습니다. 그러면 svnadmin load기본적으로 메타 데이터 (작성자, 타임 스탬프 등)와 함께 모든 커밋이 재생됩니다.

덤프 /로드 프로세스에 대한 자세한 내용은 여기에서 읽을 수 있습니다.

http://svnbook.red-bean.com/en/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate

또한 svnadmin load을 사용하는 경우 --force-uuid옵션 을 사용하는지 확인하십시오. 그렇지 않으면 사람들이 새 저장소로 전환하는 데 문제가있을 것입니다. Subversion은 UUID를 사용하여 내부적으로 저장소를 식별하며 작업 복사본을 다른 저장소로 전환 할 수 없습니다.

파일 시스템 액세스 권한이없는 경우 마이그레이션에 도움이되는 타사 옵션이있을 수 있습니다 (또는 작성할 수 있음). 그런 다음 나중에 메타 데이터를 수정합니다. 이를 수행하려면 pre-revprop-change 및 post-revprop-change 후크 스크립트가 필요하며, 이는 일종의 파일 시스템 액세스를 가정하므로 YMMV입니다. 또는 기록을 유지하지 않으려면 작업 복사본을 사용하여 새 저장소로 가져올 수 있습니다. 그러나 바라건대 이것은 사실이 아닙니다.


28
1.7 이후로 원격 저장소에 대한 관리자 권한이 필요하지 않은 svnrdump를 사용할 수 있습니다. 명령은 쉽습니다 : svnrdump dump https//remote/svn/trunk > repos.dump. 대부분의 경우 명령은 SVN 1.6에서도 작동하지만 몇 가지 문제가있을 수 있습니다. 문서를 참조하세요. * nix와 Windows에서 모두 작동합니다.
Abel

34

rsvndump svnrepository.com에서 내가 제어하는 ​​Ubuntu 서버로 리포지토리를 마이그레이션하는 데 효과적이었습니다.

Ubuntu에서 rsvndump를 설치하고 사용하는 방법 :

  1. 누락 된 종속성 ( "APR"및 Subversion 라이브러리) 설치

    sudo apt-get install apache2-threaded-dev
    sudo apt-get install libsvn-dev
    
  2. rsvndump 설치

    wget http://prdownloads.sourceforge.net/rsvndump/rsvndump-0.5.5.tar.gz
    tar xvfz rsvndump-0.5.5.tar.gz
    cd rsvndump-0.5.5
    ./configure
    make
    sudo make install
    
  3. 원격 SVN 저장소를 로컬 파일로 덤프

    rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
    
  4. 새 저장소를 만들고 로컬 덤프 파일에로드

    sudo svnadmin create /opt/subversion/my_new_rep
    sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump
    

7
그런 다음 기존 작업 사본을 마이그레이션하려면 다음을 수행하십시오. svn switch --relocate http://my.svnrepository.com/svn/old_repo http://newserver.com/svn/my_new_repo
tkdave 2011 년

force-uuid 옵션은 정확히 무엇입니까? 소스 또는 다른 것에서 디렉토리 권한을 복사합니까?
Montag451 2014

1
UUID는 저장소의 "유니버설 고유 식별자"입니다. UUID가 일치하지 않으면 재배치 된 저장소로 전환 할 수 없습니다. 나중에 svnadmin setuuid 명령을 사용하여 UUID를 설정할 수도 있습니다.
tkdave


9

블로그 노트 에서 발췌 :

이제 덤프 파일을 가져올 수 있습니다. 예를 들어 머신 / 서브 버전간에 마이그레이션하는 경우. 예를 들어 소스 저장소에서 덤프 파일을 생성하고 아래와 같이 새 저장소에로드 한 경우.

Unix 계열 시스템 용 명령 (터미널에서) :

svnadmin dump /path/to/your/old/repo > backup.dump
svnadmin load /path/to/your/new/repo < backup.dump.dmp

Microsoft Windows 시스템 용 명령 (cmd 쉘에서) :

svnadmin dump C:\path\to\your\old\repo > backup.dump
svnadmin load C:\path\to\your\old\repo < backup.dump

5

이를 수행하는 도구는

svnadmin dump

그러나 이것이 작동하려면 저장소에 대한 파일 시스템 액세스가 필요합니다. 그런 다음 (저장소가 FSFS 형식 인 경우) 저장소를 새 위치로 복사 할 수 있습니다 (BDB 형식 인 경우 덤프 /로드가 강력하게 권장 됨).

파일 시스템 액세스 권한이없는 경우 저장소 공급자에게 덤프를 제공하도록 요청해야합니다 (그리고 저장소를 삭제하도록 만들고 준수하기를 바랍니다).


5

저장소에 대한 파일 액세스 권한이없는 경우 덤프 파일을 만드는 데 rsvndump (원격 Subversion 저장소 덤프)를 선호 합니다.


나는 오늘 새로운 svn이 오래된 저장소가 손상되었다고 생각한다는 것을 어려운 방식으로 배웠습니다. 덤프를 사용하여이 문제를 해결했습니다.
Owl

4

기본적으로 작업을 수행하는 방법에는 여러 가지가 있습니다. 이 주제는 SVNBook | Migrating Repository Data Elsewhere , 그래서 책의 섹션을 읽는 것이 좋습니다.

다음은 옵션에 대한 간략한 설명입니다.

  • 환경에 따라 다르지만 저장소를 새 서버에 복사하기 만하면 작동 할 가능성이 큽니다. 저장소를 복사 한 후 저장소 후크 스크립트를 수정하여 예상대로 작동하는지 확인해야합니다.

  • svnadmin dumpsvnadmin load명령을 사용 하여 ehm, 전체 덤프를 생성 한 다음 다른 서버의 다른 저장소로로드 할 수 있습니다. svnadmin create덤프를로드하려면 새 깨끗한 저장소 가 필요 합니다. 접근 방식은 저장소 히스토리 만 다루며 후크 스크립트 및 저장소 구성 파일을 이동하지 않습니다 . 또한 덤프하려면 원본 저장소에 대한 읽기 파일 시스템 액세스 권한이 있어야합니다.

  • Subversion 1.7부터 svnrdump도구를 사용할 수 있습니다. 일반적으로 모방 svnadmin dump하고 svnadmin load기능하지만 원격으로 작동합니다. 도구는 예를 들어 HTTPS 프로토콜을 통해 Subversion 클라이언트와 같이 원격으로 작동하므로 원본 및 대상 리포지토리에 대한 읽기 / 쓰기 파일 시스템 액세스 권한이 필요하지 않습니다. 따라서 원본 저장소에 대한 읽기 액세스 권한과 대상 저장소에 대한 읽기 / 쓰기 권한이 있어야합니다.

  • 또 다른 옵션은 svnadmin hotcopy명령 을 사용하는 것 입니다. 이 명령은 주로 백업 목적으로 사용되며 구성 및 후크 스크립트를 포함하여 저장소의 전체 복사본을 만듭니다. 그러면 핫 카피 된 저장소를 다른 서버로 이동할 수 있습니다.


4

다음 svnadmin hotcopy명령을 사용할 수도 있습니다 .

svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH

모든 후크, 구성 파일 등을 포함하여 저장소에서 전체 백업을 수행합니다.

SVN Book에서 더보기


1
실제로 svnADMIN 핫 카피입니다. 즉, 이것 역시 저장소 파일 시스템 액세스가 필요합니다!
pilif

3

svnadmin을 실행하는 데 필요한 권한이 있다고 가정하면 dumpload 명령 을 사용해야 합니다.


3

호스팅 서비스에서 다른 서비스로 svn 리포지토리를 이동하는 방법과 로컬 백업을 수행하는 방법에 대한 기사를 찾았습니다.

  1. 리포지토리를 저장할 위치를 정의합니다.

    mkdir ~/repo
    MYREPO=/home/me/someplace ## you should use full path here
    
  2. 이제 빈 svn 저장소를 만듭니다. svnadmin create $MYREPO
  3. 후크 파일을 만들고 실행 가능하게 만듭니다.

    echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change
    chmod +x $MYREPO/hooks/pre-revprop-change
    
  4. 이제로 저장소 가져 오기를 시작할 수 있습니다. 그러면 svnsync다른 저장소에서 동기화 할 대상 저장소가 초기화됩니다.

    svnsync init file://$MYREPO http://your.svn.repo.here/
    
  5. 그리고 모든 보류중인 수정 사항을 초기화 된 소스에서 대상으로 전송하는 마무리 작업 :

    svnsync sync file://$MYREPO
    

이제 ~/repo디렉토리 에 로컬 svn 저장소가 있습니다.

출처:


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.