program story

Subversion 저장소를 내보내고 가져 오려면 어떻게해야합니까?

inputbox 2020. 10. 10. 10:01
반응형

Subversion 저장소를 내보내고 가져 오려면 어떻게해야합니까?


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

어떻게하면 되나요?


저장소를 이동하고 기록을 유지하려면 두 호스트 모두에서 파일 시스템 액세스가 필요합니다. 백엔드가 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를 사용하여 내부적으로 저장소를 식별하며 작업 복사본을 다른 저장소로 전환 할 수 없습니다.

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


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
    

svnsync를 사용할 수도 있습니다. 소스 저장소에 대한 읽기 전용 액세스 만 필요합니다.

svnbook에서 더


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

CmdShell> svnadmin dump D:\CoderZone2\svn-repos > ReposDump.dmp
CmdShell> svnadmin load D:\CoderZone\svn-repos < ReposDump.dmp

이를 수행하는 도구는

svnadmin dump

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

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


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


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

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

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

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

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

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


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

svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH

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

SVN Book에서 더보기


Assuming you have the necessary privileges to run svnadmin, you need to use the dump and load commands.


I found an article about how to move svn repositories from a hosting service to another, and how to do local backups:

  1. Define where you will store your repositories:

    mkdir ~/repo
    MYREPO=/home/me/someplace ## you should use full path here
    
  2. Now create a empty svn repository with svnadmin create $MYREPO
  3. Create a hook file and make it executable:

    echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change
    chmod +x $MYREPO/hooks/pre-revprop-change
    
  4. Now we can start importing the repository with svnsync, that will initialize a destination repository for synchronization from another repository:

    svnsync init file://$MYREPO http://your.svn.repo.here/
    
  5. And the finishing touch to transfer all pending revisions to the destination from the source with which it was initialized:

    svnsync sync file://$MYREPO
    

There now you have a local svn repository in the ~/repo directory.

Source:


You might find some help on migrating SVN repositories in Chapter 5. Repository Administration, Migrating a repository.

This approach requires access to svnadmin.

참고URL : https://stackoverflow.com/questions/49450/how-do-i-export-and-then-import-a-subversion-repository

반응형