2011-01-26 5 views
4

Mercurial에서 git으로 전환 중이며 hg-fast-export을 성공적으로 사용하고 있습니다. 이제 까다로운 상황이 있습니다. 나는 각 브랜치마다 별도의 hg 저장소를 사용하는 프로젝트를 가지고 있으며, 가능하다면 내 hg 변경 세트를 유지하면서 이들을 '적절한'브랜치가있는 단일 git 저장소로 변환하려고합니다.다중 hg 저장소를 여러 저장소가있는 단일 git 저장소로 변환합니다.

그래서 현재의 구조는 다음과 같습니다 - 각 폴더는 HG 저장소입니다 :

Project-v1.0 
Project-v2.0 
Project-v3.0 

내가 3 가지, V1.0을 포함 '프로젝트'라는 단일 자식 저장소, v2와 함께 끝내고 싶어 .0 및 v3.0.

이것이 가능합니까?

답변

2

hg 저장소가 하나의 기본 저장소의 복제본 인 경우 hggit 확장자를 사용하여 하나의 git repo로 내보낼 수 있습니다. 당신이 VonC이 언급 한 이식 포인트 솔루션을 사용해야합니다, 당신의 가지가 서로 다른 HG의 repos는 관련이없는 경우에 당신이 필요로하는 모든이

cd b1; mkdir ../gb1 && git init --bare ../gb1 && hg push ../gb1; cd .. 
cd b2; mkdir ../gb1 && git init --bare ../gb2 && hg push ../gb2; cd .. 
cd b3; mkdir ../gb1 && git init --bare ../gb3 && hg push ../gb3; cd .. 
# now you have one git repo for each hg branch 

cd gb1 
git remote add gb2 ../gb2 
git remote add gb3 ../gb3 
git fetch --all 
# now you have all branches in the gb1 repo 
rm -r ../gb2 ../gb3 
# the other repos are now not used anymore 

이며, 디렉토리 지하 1 층/B2 /과 B3 /에 살고 말.

1

이 가능해야 :

Project-v1.0 힘내 REPO에 Project-v2.0 역사가 가져 세 의욕들
  • 3 별개 힘내 REPOS를 생성
    • (원격으로 Project-v2.0 첨가하면서 'v2.0 그것을 페칭 '지점 : 함께 두 가지를 연결하는 graft point을 통해 2 별개의 뿌리가 생성)
      그리고는합니다 (HEADv1.0 분기가 될 첫 번째 커밋의 부모는 v2.0 분기입니다. ,합니다 (Project-v3.0에 대한 반복 (즉, 당신의 repo에 국한되지 않음) 그 이식 점을 영구적으로

    v2.0 지점의 HEAD에 이식 별도의 v3.0 분기에 처음으로 가져 filter-branch를 사용하여

  • , 및 필터 브랜치를 사용하여 그래프트를 영구적으로 유지하십시오.

    SO 질문에 "How to prepend the past to a git repository?"과 비슷한 시나리오가 있습니다 ("How to prepend the past to a git repository?"의 "일부 전치부 추가"가 아니라 "추가"가 아니더라도).

  • 관련 문제