programing

머큐리얼 프로젝트를 깃으로 변환

cafebook 2023. 5. 18. 23:59
반응형

머큐리얼 프로젝트를 깃으로 변환

수은 프로젝트를 깃 프로젝트로 전환해야 하는데 커밋 내역을 그대로 유지하고 싶습니다.저의 현재 해결책은 hg 관련 파일을 제거한 다음 필요한 파일을 수동으로 git하고 추가하는 것이었지만, 그것은 기록을 유지하지 못했습니다.이것에 대한 해결책이 있습니까?

빠른 내보내기를 사용할 수 있습니다.

cd ~
git clone https://github.com/frej/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

또한 이 SO 질문을 살펴보십시오.


4.6 이하의 Mercurial 버전을 사용하는 경우 Adrihanu가 지원합니다.

그가 논평에서 언급했듯이: "당신이 Mercurial < 4.6을 사용하고 "revsymbol not found" 오류가 발생한 경우. ~/fast-export 디렉토리 내에서 git checkout tags/v180317을 실행하여 Mercurial 또는 fast-export를 업데이트해야 합니다.

네, 드디어 해결했습니다.이것은 윈도우에서 TurtleHg를 사용하는 것입니다.사용하지 않는 경우 명령줄에서 수행할 수 있습니다.

  1. 거북이 설치Hg
  2. 탐색기에서 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 TortooHg 설정으로 이동합니다.

Tortoo Hg 설정

  1. 가능하게 하다hggit:

여기에 이미지 설명 입력

  1. 명령줄을 열고 빈 디렉토리를 입력합니다.

  2. git init --bare .git(베어레포사용지않하다발같오다생니합류가은과음으면를▁(▁(다)와 같은 오류가 발생합니다.abort: git remote error: refs/heads/master failed to update

  3. cd당신의 머큐리얼 저장소로.

  4. hg bookmarks hg

  5. hg push c:/path/to/your/git/repo

  6. 디렉터리: Git 렉토서에에서:git config --bool core.bare false(이유는 묻지 마세요."작업용 나무"에 관한 것입니다.Git은 심각하게 불친절합니다.Git를 사용하는 것보다 실제 코드를 쓰는 것이 더 쉽다고 맹세합니다.)

그것이 효과가 있기를 바랍니다. 그리고 나서 당신은 그 새로운 기트레포에서 베어가 아닌 것으로 밀어낼 수 있습니다.

기존 수은 저장소를 'GitHub' 저장소로 가져오려면 여기에서 제공하는 GitHub 임포터를 사용하면 됩니다 [로그인 필수]. 이상 빠른 수출 등을 가지고 장난치지 않습니다(매우 좋은 도구이긴 하지만).

모든 커밋, 분기 및 태그가 그대로 표시됩니다.한 가지 더 멋진 점은 작성자의 이메일 ID도 변경할 수 있다는 것입니다.아래 스크린샷을 확인하십시오.

여기에 이미지 설명 입력

여기에 이미지 설명 입력

머큐리얼을 깃으로 바꾼 내 경험에 대한 메모.

고속 수출

hg-fast-export 사용이 실패하여 위에서 언급한 대로 --force가 필요했습니다.다음에 다음 오류가 발생했습니다.

오류: 'refs/heads/messages' 참조를 잠글 수 없습니다. 'refs/heads/sub-sub-messages-name'이(가) 있습니다. 'refs/heads/messages'를 생성할 수 없습니다.

hg-fast-export를 완료한 후 저는 레포가 절단되었습니다.저는 이 레포가 몇 개의 고립된 지점을 가지고 있었고 hg-fast-export는 다소 이상화된 레포가 필요하다고 생각합니다.이 모든 것이 가장자리가 좀 거친 것 같아서 킬른 하모니(http://blog.fogcreek.com/announcing-kiln-harmony-the-future-of-dvcs/) 로 넘어갔습니다.

가마

킬른 하모니는 위에서 제안한 것처럼 프리 티어 계정에 존재하지 않는 것으로 보입니다.Git-only와 Mercurial-only repos 중에서 선택할 수 있으며 전환할 수 있는 옵션이 없습니다.저는 지원 티켓을 올렸고 그들이 회신하면 결과를 공유하겠습니다.

히기트

HG-Git 수은 플러그인(http://hg-git.github.io/) 은 저에게 효과가 있었습니다.FYI는 Mac OS X I에서 다음과 같이 macports를 통해 hg-git를 설치했습니다.

  • sudo 포트 설치 python27
  • sudo port select --set python python27
  • sudo 포트 설치 py27-hgit
  • vi ~/.hgrc

.hgrc에는 다음 행이 필요합니다.

[ui]
username = Name Surname <me@mydomain.com>

[extensions]
hgext.bookmarks =
hggit = 

그 후 저는 다음과 같은 성공적으로 거두었습니다.

hg push git+ssh://git@bitbucket.org:myaccount/myrepo.git

주의: 레포를 숙지하십시오.

위의 것들은 모두 둔기이며 팀이 깃을 제대로 사용할 수 있도록 시간이 충분히 소요되었기 때문에 추진했을 뿐입니다.

(3) 프로젝트를 처음 추진했을 때 새로운 변경 사항이 모두 누락되었습니다.이 코드 라인은 가이드로만 보아야 하기 때문입니다.

$ hg bookmark -r default master # make a bookmark of master for default, so a ref gets created

git에 푸시할 때 기본 브랜치가 마스터로 간주될 수 있다는 이론이며, 저의 경우 'stable'을 마스터에 해당하는 것으로 사용하는 레포를 상속했습니다.게다가, 저는 레포의 끝이 아직 '안정된' 지점과 병합되지 않은 핫픽스라는 것도 발견했습니다.

Mercurial과 변환할 레포를 제대로 이해하지 못하면 변환을 수행하지 않는 것이 좋습니다.

두 번째 변환 시도를 위해 저장소를 준비하기 위해 다음 작업을 수행했습니다.

hg update -C stable
hg merge stable/hotfix-feature
hg ci -m "Merge with stable branch"
hg push git+ssh://git@bitbucket.org:myaccount/myrepo.git

그 후 저는 검증 가능하게 동등한 프로젝트를 수행했지만, 앞서 언급한 고아가 된 가지는 모두 사라졌습니다.저는 그것이 너무 심각하다고 생각하지 않지만, 저는 이것을 실수로 후회하며 살 수도 있습니다.따라서 저의 최종 생각은 어쨌든 원본을 유지하는 것입니다.

편집: 최신 커밋을 원하는 경우 위의 병합보다 단순합니다.

hg book -r tip master
hg push git+ssh://git@bitbucket.org:myaccount/myrepo.git

저도 비슷한 작업을 해야 했지만, 여기에 있는 다른 답변에서 충분히 다루지 못한 측면이 몇 가지 포함되어 있었습니다.

  • 저는 제 레포의 모든 지점(제 경우: 두 개 또는 일반적으로 둘 이상)을 변환하고 싶었습니다.
  • ASCII가 아닌 문자와 (윈도우즈 사용자인) UTF8 인코딩이 아닌 문자가 있었습니다(궁금한 점:커밋 메시지 및 파일 이름에 독일어 umlaute)가 포함됩니다.

저는 패스트 엑스포트와 hg-fast-export를 시도하지 않았습니다. 왜냐하면 그들은 당신의 기계에 파이썬과 일부 머큐리얼 파이썬 모듈이 있어야 하지만 제가 가지고 있지 않았기 때문입니다.

거북이랑 hg-init 해봤어요.HG, 그리고대답은 저에게 좋은 시작을 주었습니다.그러나 한 번에(*) 변환하는 것이 아니라 현재 분기만 변환하는 것처럼 보였습니다.그래서 저는 hg-init 문서와 이 블로그 게시물을 읽고 추가했습니다.

[git]  
branch_bookmark_suffix=_bookmark

나의 수은주.ini에게, 그리고 했습니다.

hg bookmarks -r default master  
hg bookmarks -r my_branch my_branch_bookmark  
hg gexport

(변환할 모든 분기에 대해 두 번째 줄을 반복하고, 세 번째 줄을 실행하기 전에 다른 커밋을 수행해야 하는 경우 다시 반복합니다.)폴더를 만듭니다.git이내에.hg내보낸 가지가 모두 있는 맨 깃레포인 것으로 밝혀졌습니다.저는 이 레포를 복제할 수 있었고 원하는 대로 작업 복사본을 가질 수 있었습니다.

아니면 거의...

입니다.

git status

제 작업 복사본에는 이름에 ASCII가 아닌 문자가 포함된 모든 파일이 추적되지 않은 파일로 표시되어 있습니다.그래서 저는 연구를 계속했고 다음 조언을 따랐습니다.

git rm -rf --cached \*  
git add --all
git commit 

그리고 마침내 레포는 비트버킷으로 올라갈 준비가 되었습니다 :-)

는 이 답변에 언급된 대로 Github 수입업자도 시도해 보았습니다.저는 비트버킷을 소스 시스템으로 사용했고, Github은 모든 브랜치를 자동으로 변환하는 등 꽤 잘 해냈습니다.그러나 내 커밋 메시지(Web-UI 및 로컬)와 파일 이름(Web-UI만 해당)에서 ASCII가 아닌 모든 문자에 대해 '?'-문자가 표시되었으며, 위에서 설명한 대로 파일 이름을 수정할 수는 있지만 커밋 메시지를 어떻게 해야 할지 몰라서 hg-init 접근 방식을 선호합니다.인코딩 문제가 없었다면 Github 임포터는 완벽하고 빠른 해결책이었을 것입니다(유료 Github 계정을 가지고 있거나 Github에서 로컬 머신으로 리포를 풀하는 데 걸리는 시간 동안 공개를 용인할 수 있는 한).


(*) 내보내기를 원하는 모든 지점을 북마크해야 한다는 사실을 알기 전처럼 보였습니다.링크된 답변에 나와 있는 것처럼 (!) repo를 누르면 모든 분기가 표시됩니다.

시작:

http://hivelogic.com/articles/converting-from-mercurial-to-git

마이그레이션

비교적 간단한 과정입니다.먼저 fast-export를 다운로드한 다음(가장 좋은 방법은 데스크톱에 바로 복제할 Git 저장소를 통해) 새 Git 저장소를 생성하고 마이그레이션을 수행한 다음 HEAD를 확인합니다.명령줄에서는 다음과 같이 수행됩니다.

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

빠른 내보내기를 실행한 후 프로젝트가 마이그레이션될 때 커밋 목록이 많이 표시됩니다.오류가 표시되면 잘못 지정된 Python 경로와 관련이 있을 수 있습니다(위의 참고 사항 및 시스템에 맞게 사용자 지정).

됐어요, 끝났어요.

또 다른 옵션은 무료 Kilen 계정을 만드는 것입니다. 100% 메타데이터 보존으로 git와 hg 사이의 kilen 왕복 여행입니다. 따라서 이 계정을 한 번만 변환하거나 사용하여 원하는 클라이언트를 사용하여 저장소에 액세스할 수 있습니다.

댓글을 달 수 있는 권한이 없습니다. 죄송합니다. 댓글을 달 수 없습니다.

@mar10 코멘트는 제가 이것을 하기 위해 필요한 누락된 부분이었습니다.

'/path/to/old/mercurial_repo'는 URL이 아닌 파일 시스템의 경로여야 하므로 이전에 원래 저장소를 복제해야 합니다.2013년 12월 27일 16:30

이 의견은 제가 이 문제를 해결한 답인 https://stackoverflow.com/a/10710294/2148757 과 관련된 것입니다. https://stackoverflow.com/a/16037861/2148757 은 여기에 표시된 정답과 동일한 답입니다.

이것은 우리의 hg 프로젝트를 커밋 내역이 그대로 유지되도록 이동시켰습니다.

언급URL : https://stackoverflow.com/questions/16037787/convert-mercurial-project-to-git

반응형