나는 상업용 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를 사용하여 내부적으로 저장소를 식별하며 작업 복사본을 다른 저장소로 전환 할 수 없습니다.
파일 시스템 액세스 권한이없는 경우 마이그레이션에 도움이되는 타사 옵션이있을 수 있습니다 (또는 작성할 수 있음). 그런 다음 나중에 메타 데이터를 수정합니다. 이를 수행하려면 pre-revprop-change 및 post-revprop-change 후크 스크립트가 필요하며, 이는 일종의 파일 시스템 액세스를 가정하므로 YMMV입니다. 또는 기록을 유지하지 않으려면 작업 복사본을 사용하여 새 저장소로 가져올 수 있습니다. 그러나 바라건대 이것은 사실이 아닙니다.
rsvndump
svnrepository.com에서 내가 제어하는 Ubuntu 서버로 리포지토리를 마이그레이션하는 데 효과적이었습니다.
누락 된 종속성 ( "APR"및 Subversion 라이브러리) 설치
sudo apt-get install apache2-threaded-dev
sudo apt-get install libsvn-dev
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
원격 SVN 저장소를 로컬 파일로 덤프
rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
새 저장소를 만들고 로컬 덤프 파일에로드
sudo svnadmin create /opt/subversion/my_new_rep
sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump
svn switch --relocate http://my.svnrepository.com/svn/old_repo http://newserver.com/svn/my_new_repo
svnsync를 사용할 수도 있습니다. 소스 저장소에 대한 읽기 전용 액세스 만 필요합니다.
내 블로그 노트 에서 발췌 :
이제 덤프 파일을 가져올 수 있습니다. 예를 들어 머신 / 서브 버전간에 마이그레이션하는 경우. 예를 들어 소스 저장소에서 덤프 파일을 생성하고 아래와 같이 새 저장소에로드 한 경우.
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
기본적으로 작업을 수행하는 방법에는 여러 가지가 있습니다. 이 주제는 SVNBook | Migrating Repository Data Elsewhere , 그래서 책의 섹션을 읽는 것이 좋습니다.
다음은 옵션에 대한 간략한 설명입니다.
환경에 따라 다르지만 저장소를 새 서버에 복사하기 만하면 작동 할 가능성이 큽니다. 저장소를 복사 한 후 저장소 후크 스크립트를 수정하여 예상대로 작동하는지 확인해야합니다.
svnadmin dump
및 svnadmin 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 리포지토리를 이동하는 방법과 로컬 백업을 수행하는 방법에 대한 기사를 찾았습니다.
리포지토리를 저장할 위치를 정의합니다.
mkdir ~/repo
MYREPO=/home/me/someplace ## you should use full path here
svnadmin create $MYREPO
후크 파일을 만들고 실행 가능하게 만듭니다.
echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change
chmod +x $MYREPO/hooks/pre-revprop-change
이제로 저장소 가져 오기를 시작할 수 있습니다. 그러면 svnsync
다른 저장소에서 동기화 할 대상 저장소가 초기화됩니다.
svnsync init file://$MYREPO http://your.svn.repo.here/
그리고 모든 보류중인 수정 사항을 초기화 된 소스에서 대상으로 전송하는 마무리 작업 :
svnsync sync file://$MYREPO
이제 ~/repo
디렉토리 에 로컬 svn 저장소가 있습니다.
출처:
5 장. 리포지토리 관리, 리포지토리 마이그레이션에서 SVN 리포지토리 마이그레이션에 대한 도움말을 찾을 수 있습니다 .
이 접근 방식에는 svnadmin에 대한 액세스 권한이 필요합니다.
svnrdump dump https//remote/svn/trunk > repos.dump
. 대부분의 경우 명령은 SVN 1.6에서도 작동하지만 몇 가지 문제가있을 수 있습니다. 문서를 참조하세요. * nix와 Windows에서 모두 작동합니다.