Windows에서 SVN에서 Mercurial (HG)로 마이그레이션 / 변환하는 방법


120

기록, 레이블 등이 포함 된 두 개의 SVN 저장소를 Mercurial로 마이그레이션하는 도구를 찾고 있습니다.

TortoiseHg (Windows x32)를 사용하고 있으므로 ConvertExtensions가 삭제됩니다. Linux 상자 ( hgsvn ) 에서이 프로세스를 수행하는 방법에 대한 정보가 있지만 사용 가능한 Linux 시스템이 없습니다.

Windows에서 이러한 Python 스크립트를 사용할 수 있습니까? 그렇다면 어떻게해야합니까? 또는이 프로세스를 수행하는 데 사용할 수있는 다른 도구는 무엇입니까?

기본적으로 SVN 프로젝트를 Mercurial로 어떻게 변환 할 수 있습니까?

답변:


93

이 문제를 직접 해결해야했습니다. VisualSVN Server를 호스팅하는 별도의 Windows 서버가있는 Windows XP 시스템이 있습니다.

또한 TortoiseHGCollabNet Subversion Command-Line Client가 설치되어 있습니다 .

<Enable Convert Extension w/ Tortoise Hg 2>

TortoiseHg 2.0을 사용하면 변환 확장을 그 어느 때보 다 쉽게 사용할 수 있다는 의견을 지적 해 주신 bgever 에게 감사드립니다 . 그가 말했듯이

TortoiseHG 2.0을 사용하면 훨씬 간단 해졌습니다. 시작 메뉴에서 TortoiseHG Workbench를 시작합니다. 파일-> 설정을 선택하십시오. 목록에서 확장을 선택하십시오. '변환'확인란을 선택하고 확인을 클릭합니다. 그게 다야! 더 이상 구성 파일을 생성하고 파일 시스템에서 검색 할 필요가 없습니다. – bgever 3 월 11 일 7:56

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

저장소를 SVN에서 HG로 변환하기 위해 다음 단계를 따랐습니다.

1) C : \ Program Files \ TortoiseHg \ Mercurial.ini를 엽니 다.

편집하다

참고로-Tortoise Hg가이 파일을 다음으로 마이그레이션했습니다.

  • XP 이하-C : \ Documents and Settings \ USERNAME \ Mercurial.ini
  • Vista 이상-C : \ Users \ USERNAME \ Mercurial.ini

해당 파일은 대부분 비어 있으며 여기에서 재정의하려는 항목 만 나열합니다. 그것이 당신이 가진 것이라면, 파일의 맨 끝에 다음 두 줄을 추가하십시오.

[extensions]
convert =

2) 다음으로 시작하는 줄 검색

[확장자]

3) 그 아래에는 각 줄에 세미콜론 (;)으로 주석 처리 된 키워드 목록이 표시됩니다.

4) 말하는 줄 찾기

; 변환 =

세미콜론을 삭제하여

변환 =

</Enable Convert Extension Manually>

5) 명령 프롬프트를 열고 새 hg 폴더를 만들려는 디렉터리로 이동합니다 (이 프로세스는 명령 프롬프트가 열려있는 디렉터리에 yoursvnreponame-hg라는 새 폴더를 만듭니다).

6)이 명령 사용

hg 변환 파일 : /// y : / yoursvnreponame

변환 도구가 네트워크 리포지토리에 문제가있을 수 있다는 것을 알았으므로 여기에 드라이브를 매핑해야했지만 이것은 잘 작동했습니다.


이 질문에 대한 답을 선택하는 것은 어려웠습니다. 그는 편집에 대한 그의 대답 변환 확장을 가능하게하는 설정에 주석 할 때 evilbloodydemon 바로,하지만이 답변이 더 명확하고 정확
데이비드 레이

1
나는 SVN 명령 줄 클라이언트없이 이것을 테스트했으며 잘 작동했다는 것을 언급하고 싶었습니다. 이 작업을 수행하는 SVN 서버가 필요하지 않고 저장소 파일 경로에 액세스하기 만하면됩니다.
Michael La Voie

이것은 Mercurial V1.4.3에서 잘 작동했습니다. 1 년 된 svn 저장소는 전체 기록을 그대로 유지하면서 매우 빠르게 변환되었습니다. 감사합니다!
Jonathan Webb

1
추가하기 만하면 기본 TortoiseHG 설치에서 ini 파일이 생성되지 않습니다. 먼저 일부 설정을 적용 / 저장하거나 수행중인 작업을 알고있는 경우 빈 파일로 시작해야합니다.
Ahmad

9
TortoiseHG 2.0을 사용하면 훨씬 간단 해졌습니다. 시작 메뉴에서 TortoiseHG Workbench를 시작합니다. 파일-> 설정을 선택하십시오. 목록에서 확장을 선택하십시오. '변환'확인란을 선택하고 확인을 클릭합니다. 그게 다야! 더 이상 구성 파일을 생성하고 파일 시스템에서 검색 할 필요가 없습니다.
Bart Verkoeijen 2011 년

8
  1. localhost에서 svn 서버 시작
  2. hg 변환 svn : // localhost / your_repo
  3. 완료, svn 바인딩은 file : // 프로토콜에만 필요하기 때문입니다.

아니요, win32 또는 TortoiseHg 용 수은 ​​바이너리에는 변환 확장이 제공되지 않으므로 "hg convert"는 win32에서 유효한 명령도 아닙니다.
David Lay

1
file : // 대신 svn : //을 사용해
보았지만

file : // 대신 svn : //을 사용하면 Python 바인딩이 없어도 효과적이었습니다. svn 서버를 시작하려면 명령은 다음과 같습니다. svnserve -r <저장소 루트 경로> -d
Petter Wigle

7

Mercurial에는이를 위한 변환 확장 기능이 내장되어 있습니다.


2
나는 이것이 내가 우연히 만난 첫 번째 일이지만 인용 : "Win32 Mercurial 바이너리로는 이것을 할 수 없습니다. 내장 Python 라이브러리에 Subversion 바인딩을 설치할 방법이 없습니다." TortoiseHg ...
David Lay

Linux 라이브 CD 또는 가상 머신을 사용하십니까?
richq

이것은 절대적으로 정답입니다. 나는 hg 변환 확장 만 사용하고 ( selenic.com/mercurial/wiki/… ) pysvn 확장없이 SVN 저장소에 대한 파일 프로토콜을 사용했습니다. hg convert file : /// X : / HOME / REPOS / mysvnrep newhgrep
van

5

SVN Repo를 HG Repo로 변환하고 다른 서버에 복사하려면 몇 가지가 필요합니다.

  1. TortoiseHG가 설치되었습니다. (현재 사용중인 버전 확인)
  2. Python이 설치되었습니다. (현재 사용중인 버전 확인)
  3. Python 모듈 ( http://pysvn.tigris.org/project_downloads.html에서 찾을 수 있음) )
  4. convertTortoise에 확장을 추가해야합니다 . 시작 메뉴에서 TortoiseHG Workbench를 시작합니다. 을 선택 File -> Settings합니다. Extensions목록에서 선택하십시오 . 체크 convert체크 박스를하고 확인을 클릭합니다.

먼저 변환…

  1. 현재 SVN Repo가있는 폴더를 작업중인 컴퓨터에 매핑하는 것이 가장 좋습니다. (즉 \\server\folder , SVN Repo 폴더 자체를 매핑하지 마십시오. 바로 위에 폴더를 매핑하십시오.) 매핑 된 드라이브에 다음과 같은 문자를 입력하십시오.Y:\
  2. 명령 프롬프트를 열고 다음을 입력하십시오. CD /D Y:\
  3. 상기 Y:\프롬프트 : hg convert y:/RepoName 앞으로 및 뒤로 슬래시의주의 (현재 리포의 이름을 사용). 명령에있는 것은 슬래시입니다. 또한 이름에 공백이 있으면 이름을 따옴표로 묶으십시오. (예 Y:/"My Repo folder")
  4. 이제 실행 중이어야하며 이전 폴더와 함께 다른 폴더를 생성합니다. 그리고 hg 폴더가 안에 있어야합니다. 시작되지 않으며 시작하지 마십시오!
  5. 변환이 완료되었습니다.

둘째, 복제…

  1. TortoiseHG Workbench를 엽니 다. 이동File -> Clone Repository
  2. 소스 : 변환 된 저장소의 전체 경로를 입력하십시오.
  3. 대상 : 리포지토리를 복제 할 전체 경로를 입력합니다. 복제 프로세스에서 폴더를 만들고 초기화하므로 새 대상에 폴더를 만들 필요가 없습니다.
  4. 복제 된 새 폴더에 권한을 추가합니다.
  5. 완료되었습니다 !!!

안녕하세요, init첫 번째 저장소 가 아니어야하는 이유를 설명 할 수 있습니까?
Ben Page

3

아무도 아직 언급하지 않습니다 거의 두통없이 할 수있는 hgsubversion ( Extension Wiki )을 (희귀 한 경우와 특정 트리 제외).

확장을 추가하고 활성화하고 hg clone SVN_REPO지역 수은 저장소에


1

이것은 TortoiseHg FAQ에 있습니다 .

Subversion 저장소를 Mercurial로 어떻게 변환 할 수 있습니까?

svn-win32-1.4.6 명령 줄 도구를 설치 한 다음 경로에 추가해야합니다. 그런 다음 변환 확장을 활성화해야합니다. 이 시점에서 ' hg convert'명령을 사용 하여 변환을 수행 할 수 있어야합니다 . 변환 확장에 대한 문제 / 질문은 Mercurial 메일 링리스트 또는 #mercurial에 직접 보내주십시오 irc.freenode.net.

그래서 분명히 가능합니다. Linux를 사용하고 있으므로 직접 시도하지 않았습니다.


0

방금 HTTP 인증을 사용하는 원격 SVN 저장소를 Mercurial 저장소로 변환했으며이를 수행하는 방법에 대한 문서가 많지 않습니다. Mercurial 소스를 다운로드하고 소스 패키지를 사용하여 독립 실행 형으로 설치해야 SVN 바인딩이 올바른 방식으로 작동합니다.

다음과 같이 설치했습니다.

python setup.py install

내 Server 2003 상자에서 잘 작동했습니다. 이제 다음과 같은 작업을 수행하여 SVN 저장소를 올바른 방법으로 변환 할 수 있습니다.

python c:\python26\scripts\hg convert <remote repo>

Mercurial 사이트의 ConvertExtension에 대한 문서는 매우 명확하지는 않지만 다음과 같이 말합니다.

Subversion 바인딩을 [Mercurial의] 내장 Python 라이브러리에 설치할 수있는 방법이 없습니다. 따라서 독립형 Python 위에 설치된 Mercurial을 사용해야합니다.

이제 변환에는 독립 실행 형 버전을 사용하고 실제 VCS 작업에는 TortoiseHg를 사용합니다.


0

안하는 것보다 늦게하는 것이 낫다 ...

하나의 가격에 대한 두 가지 답변 ...

  1. 공개 된 오픈 소스 리포지토리 인 경우 http://svn2github.com/add/ 를 사용 하여 GitHib에 해당 리포지토리를 복제 한 다음 Hg로 가져 오는 데 약 30 분이 걸렸습니다.

  2. 사용의 장점은 hg convert재개 할 수 있다는 것입니다. SVN을 Hg로 변환하는 데는 며칠 이 걸릴 수 있습니다 . 이 작업을 중지하면 중단 된 지점부터 다시 시작됩니다.

아래는 Codeplex SVNbridge 쓰레기 때문에 작성한 배치 파일입니다. 이 예제의 리포지토리는 전체 기록을 가져 오는 데 며칠이 걸렸습니다 (저는 호주에 있으므로 지연 시간이 요인 일 수 있음). 나는 그것이 TFS 서버 어딘가에 좋은 결과를 주었다고 생각하고 싶습니다.

이 배치 파일은 SVN 소스에서 실제로 SVN을 사용하는 유일한 파일 인 경우 언제든지 실행하여 SVN 소스에서 업데이트를 가져올 수 있습니다. 나는 그것을 테스트하지 않았으므로 이것을 수행하면 어떻게되는지 확인하십시오. 그래서 내가 당신이라면 리포지토리를 편집하려는 경우 원래 브랜치를 포기할 것입니다.

그만큼 robocopy shamap물건을 사용하면 수은의 repo를 복제 할 경우 SVN 기록을 유지하는 것입니다, shamap은 임시이다 - (나는 새로운 지점에 그렇게 할 것)의 배치 파일 및 shamap을 확인합니다.

배치 ...

@echo off
mode con:cols=100 lines=800

:: Change the SVN remote name here
::
set remote=https://cinch.svn.codeplex.com/svn
::

title Fetching SVN from %remote%. This could take...DAYS
echo .
echo Fetching SVN checkins from %remote%
echo .
echo Dependencies: Tortoise Hg and hg.exe in the Path would be ideal.
echo using hg convert
echo .
echo First, I will make a backup of shamap in the hg repo folder.
echo If shamap in .hg\ is newer then it will be copied to the repo.
echo You should commit it so hg clones of this repo work with this.
echo Commit this .BeeyATch file as well.
echo shamap keeps track of what has been fetched from SVN.
echo ok, that ends the educational part of this script...
echo Now I will fetch SVN changes from
echo %remote%
echo ...
echo ...(this could take quite some time)...
echo ...DAYS...yes...DAYS
echo ...especially if it's fecking Codeplex SVN...
echo .
echo If this craps out just run it again - it will resume from where it left off. 
echo and fetch the rest...eventually
echo .
echo Control C to abort or any other key to start:
echo .

pause

echo .
:: http://mercurial.selenic.com/wiki/ConvertExtension <== see for details of shamap
:: copy the shamap from the original convert into the .hg folder unless it is already there & newer
:: don't panic if shamap is much bigger than the original - diff it to see why
robocopy .\ .\.hg\ shamap /XO 
robocopy .\.hg\ .\ shamap /XO 
echo .

hg convert --verbose --debug %remote% "%CD%"
echo .
echo .
echo Finished fetching from %remote%
title Finished fetching from %remote%
echo Any  key to Exit
echo .
pause

exit

0

Mercurial convert확장 사용 :

  1. 확장 변환을 활성화합니다. 추가 convert=받는 사람 [extensions]이 같은 .hgrc의 섹션 :

    [확장자]
    convert =

  2. Linux에는 추가 Python 바인딩이 필요합니다. sudo apt-get install python-subversion
  3. hg convert명령 실행
    • hg convert -h도움말 보기
    • 예 : hg convert http://[svnserver]/[Project] --source-type svn [DestinationDir] (참고 2 참조)
  4. 새로 생성 된 Mercurial 저장소로 푸시 : hg push https://[mercurialserver]/[Project]

참고 : hg convert 명령을 반복하여 이전 변환 후 svn 저장소에서 이루어진 새로운 변경 사항을 포함 할 수도 있습니다.

주 2 : HG 변환을 사용하여 작동하지 않는 경우 http://또는 svn://처음 Subversion 저장소를 체크 아웃 (또는 하나를 기존 업데이트) 로컬 체크 아웃을 사용하여 변환을 할 수; 예:hg convert [DirectoryOfLocalCheckout] --source-type svn [DestinationDir]

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