Mercurial 폴더를 Git 저장소로 변환


137

나는 Mercurial에 대한 큰 경험이 없으며 대부분 Git 사람입니다.

자식 저장소에 특정 Mercurial 폴더 / 파일을 미러링하고 싶습니다. 내가 실제로하려는 것은 Mercurial 저장소에서 Git으로 파일 히스토리를 내보내고 향후 커밋과 동기화 할 수있게하는 것입니다.

진행하는 방법에 대한 제안이 있습니까? 나는 가야 할 길은 Mercurial 패치의 이력을 얻고, 모든 커밋을 정기적으로 패치로 내보내고 Mercurial 패치를 Git 저장소에 적용하는 것이어야한다고 생각합니다.


요즘 GitHub.com는 것이다 가져 당신을 위해 .
브래드 투렉

답변:


125

리눅스 또는 아무것도 bash/sh또는 유사한, 또는 python으로 시도 빠른 수출 :

cd
git clone git://repo.or.cz/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD

1
자, git과 mercurial을 동기화하고 싶습니까? 마찬가지로 ?
Yohann

1
'/ path / to / old / mercurial_repo'는 URL이 아닌 파일 시스템의 경로 여야하므로 먼저 원래 저장소를 복제해야합니다.
mar10

1
내 경우에는을 사용해야했다 PYTHON=python2 ~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo. 그 외에도 완벽하게 작동했습니다.
Artur Czajka

5
간결한 답변 주셔서 감사합니다! 나는 sudo easy_install mercurial먼저 해야했다 . 지침에 좋은 것
마커스 웨스틴

3
당신은 윈도우 머신에있는 경우 사용 망할 놈의 강타 실행 hg-fast-export.sh
Augustas

61

Windows : TortoiseHG Hg-Git 확장

Hg-Git 을 사용하여 Mercurial 저장소를 Git으로 변환 할 수 있습니다. SSH, HTTP 또는 HTTPS를 통해 액세스되는 로컬 저장소 또는 원격 저장소를 사용할 수 있습니다.

로컬 리포지토리 변환의 예

  1. Hg-Git을 설치하십시오.

    • Windows에서 TortoiseHg 는 Hg-Git과 함께 제공되지만 설정 도구 (확장 섹션)를 통해 활성화 해야합니다.

      TortoiseHg 설정

      또는 수동으로 ~/mercurial.ini

      [extensions]
      hggit =
      
  2. 다음 명령을 사용하여 저장소를 변환하십시오.

    $ mkdir git-repo; cd git-repo; git init; cd ..
    $ cd hg-repo
    $ hg bookmarks hg
    $ hg push ../git-repo
    

hg책갈피 힘내 혼란 현재 체크 아웃 지점에 다른 HG-자식 푸시 등의 문제를 방지 할 필요가있다. hgGit 리포지토리에 이름의 브랜치를 만듭니다 . master에서 변경 사항을 얻으려면 다음 명령을 사용하십시오 (첫 번째 실행에서만 필요하며 나중에는 git merge또는을 사용하십시오 rebase).

$ cd git-repo
$ git checkout -b master hg

나는 git-hg가 꽤 버그가 있음을 발견했지만 이것은 매력처럼 작동했으며 추가 다운로드가 필요하지 않았습니다.
Timmmm

2
전체 저장소가 아닌 폴더를 원했습니다.
Simone Carletti

github은 이제 github에서이를 직접 지원하는 툴을 가지고 있습니다. stackoverflow.com/questions/16037787/…
Tommy

@SimoneCarletti 이 질문을 살펴보십시오 . 파일 / 폴더와 기록을 임시 저장소로 내보내는 데 도움이됩니다. 그런 다음 제공된 솔루션 중 하나를 사용하여 임시 Mercurial 저장소를 Git으로 변환 할 수 있습니다.
naXa


11

Gitify

변환을 수행하는 더 현대적이고 사용하기 쉬운 대안으로 보입니다 https://github.com/buchuki/gitifyhg

pip install gitifyhg
git clone gitifyhg::<hgrepoaddress>
# done, you have a git repo with the entire history of the hg one

1
전체 저장소를 폴더로 변환하고 싶지 않았습니다.
Simone Carletti


3
참고-gitifyhg는 현재 최신 Mercurial 버전에서 최신 버전이 아닙니다.
Zoran Pavlovic

4

Windows 10에서 Mercurial 저장소를 Git으로 변환

인코딩에 문제가없는 경우 TortoiseHG Hg-Git 확장을 사용하십시오.

md new-repo && cd new-repo
git init --bare .git
cd ..\old-mercurial-repo
hg bookmark -r default master
hg push ..\new-repo
cd ..\new-repo
git config --bool core.bare false

인코딩에 문제가있는 경우 빠른 내보내기를 사용하십시오.

배쉬 설치

관리자 권한으로 PowerShell을 열고 다음을 실행하십시오.

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Microsoft Store 에서 Ubuntu 16.04 LTS 설치

배쉬를 열고 실행

수은을 설치하다

sudo -s
apt-get update
apt install mercurial

빠른 내보내기 v180317 가져 오기 (180317 이후 버전이 올바르게 작동하지 않는 순간)

cd /mnt/c/path_to_work_folder
git clone https://github.com/frej/fast-export.git
cd fast-export
git checkout tags/v180317
cd ..

저장소 변환

git init new-repo && cd new-repo
git config core.ignoreCase false && git config core.quotepath off
../fast-export/hg-fast-export.sh -r ../path_to_mercurial_repo/ --fe cp1251
git checkout master

인코딩 옵션 :

  • -f 같은 인코딩 -f cp1251
  • --fe 같은 파일 이름 인코딩 --fe cp1251

3

hg-git-fast-import

https://github.com/kilork/hg-git-fast-import

다음과 같은 기능을 가진 또 다른 유틸리티 :

  1. 단일 및 다중 Mercurial 리포지토리를 Git 리포지토리로 가져 오기
  2. 이전에 가져온 Mercurial 저장소에서 Git 저장소로 새 개정판 가져 오기
  3. 태그.
  4. 닫힌 가지.
  5. diff로 최종 결과 확인.

당신은 당신을 위해 바이너리 다운로드 할 수 있습니다 플랫폼 및 경로 어딘가에 넣어 또는 사용하여 설치 cargo(필요로 rust하는 설치 ) :

cargo install hg-git-fast-import

그런 다음 사용법은 다음과 같습니다.

hg-git-fast-import single /path/to/source_hg /path/to/target_git

그것은 필요하지 않습니다 PythonMercurial설치해야합니다. 고급 구성을 사용하면 작성자 또는 분기를 대체하고 분기를 접두사 등으로 만들 수 있습니다.


2

github.com을 사용 하는 경우 가져 오기 기능있는 것으로 보입니다. 사용하면 간단하게 HG 프로젝트의 URL을 입력 할 수 있습니다.

먼저 새 저장소 를 만든 다음 새 저장소의 방문 페이지에서 맨 아래로 스크롤하여 "코드 가져 오기"버튼을 클릭하십시오 .

가져 오기 코드 버튼의 컨텍스트

그런 다음 이전 저장소URL을 입력하고 "가져 오기 시작"을 누르십시오.

"가져 오기 시작"버튼에 대한 컨텍스트

그런 다음 GitHub가 나머지를 처리합니다!

Github의 비즈니스 관리

GitHub는 필요한 경우 기존 리포지토리에 대한 자격 증명을 요구합니다.

아! 공식 가이드를 찾았습니다


0

Windows에서는 약간 까다로울 수 있습니다. mercurial ( hggit) 에서 올바른 플러그인을 활성화 한 후 TortoiseHG를 사용할 수도 있습니다.

  1. 복제 수은 저장소
  2. git repo 복제
  3. 콘솔 사용 : 콘솔 사용
  4. 콘솔 사용 :

    % hg bookmarks hg

    % hg push <relative path to>/<git-repo>


0

어쩌면 오늘날 누군가를 도울 수 있습니다 (수 은를 보관하면서 git로 변환 할 때 기록을 유지하는 경우). 수은 4.0.1에서 작동하도록 테스트되었습니다.

~$ git clone https://*old_hg_repo*
~$ git clone https://github.com/frej/fast-export.git
~$ cd fast-export
~$ git checkout tags/v180317
~$ cd ..
~$ mkdir new_git_repo
~$ cd new_git_repo
~$ git init
~$ .../fast-export/hg-fast-export.sh -r ../old_hg_repo/ --force
~$ git checkout HEAD

마지막으로 새로 변환 된 로컬 리포지토리를 푸시하십시오.

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