2010-03-25 1 views
2

나는 편안하게 찾을 수있는 다른 버전 시스템을 가지고 놀았습니다. 나는 SVN (프로젝트 "f1"의이 버전을 호출 할 수있다)으로 시작한 다음 GIT로 변경했다. 하지만 이전 버전의 SVN repo를 GIT로 변환하는 방법을 모르므로 폴더를 복사하고 .svn 파일을 삭제 한 다음 GIT repo (이 복사 된 버전을 "f2"라고 함)로 변환했습니다.오래된 저장소를 수은으로 변환

이제 Mercurial을 가지고 놀고있어 Windows 용 Tortoise 클라이언트가 있다는 것을 알게되어 매우 기쁩니다. 또한 GIT repo를 Mercurial로 변환하는 것이 얼마나 쉬운 지 확인하기 위해 역사를 보존했습니다. (이 경우 hG 버전 "f3"이라고 부릅니다.)

그러나 지금 내가 궁금해하는 점은 : 나의 역사를 여전히 가지고있는 오래된 SVN 저장소에 무엇이 있습니까? 전에 GIT와 함께 놀았습니까?

이전 버전의 SVN Repo를 Mercurial로 변환 할 수 있다고 생각합니다. 그런 다음이 두 개의 히스토리를 하나의 리포지토리에 병합 할 수있어서 한 곳에서 전체 히스토리 세트를 가질 수 있습니까? 즉, f1을 f3 앞에 붙일 수 있습니까?

답변

2

넌 수없는 앞에 추가만으로는 모든 개정 해시 코드에 의해 식별되고, 그 해시는 콘텐츠 (다른 것들 중에서)로 구성되어 있기 때문에 근본적으로, F3을 변경하지 않고 그대로 역사/상위 점에서 F3까지 F1 부모의 수정과 해시 따라서 f3의 첫 번째 노드의 부모를 변경하면 f3의 모든 해시 코드가 변경됩니다.

f3을 재생성하려는 경우에는 f1에서 f3을 앞에두고 f4라고 말하십시오. 그렇게하면 f3의 모든 클론을 무효화 할 수 있습니다. 그러나 당신이 괜찮을지 모르는 한 팀이라면.

f3의 모든 해시를 변경하는 것이 좋지 않다면 (그다지 좋지 않은) 다른 옵션은 hg convert을 사용하여 f1에서 새 수은 저장소를 만들고 f5라고 부르겠습니다. 그 다음 f3에 hg pull -f f5가됩니다. f5에서 어떤 changeset도 f3에있는 어떤 changeset의 조상이나 자식이 될 수 없으므로 (공통 혈통이없는 경우) 두 개의 헤드와 두 개의 changeset 스트림으로 끝납니다. 어떤 사람들은 그렇게하지만 솔직히 나는 그것을하는 데 어떤 실질적인 이점도 보지 못합니다.

나는 어디서나 f1을 f5 (이전의 모든 역사를 가진 수은 표지)로 변환 한 다음 참조 용으로 유지합니다.

+0

이 모든 것이 가치가있는 것보다 훨씬 더 많은 것처럼 보입니다. 비록 그것이 두 개의 분리 된 저장소에 있더라도 나는 완전한 역사를 가지고 있습니다. 그러나 나는 매일 Mercurial에 대해 더 배우고있다 :) 고마워. – nedlud

1

Transplant extension을 사용해 보셨습니까? 저장소가 관련이없는 경우에도 변경 내용을 가져올 수 있습니다.

그래서 당신이 할 수있는 일은 f1을 가져와 HGSVN이라고하는 새로운 repo로 변환하십시오. 이 repo는 당신에게 전체 svn-created history를 담아 줄 것입니다. f1에서 더 이상의 수정 작업을 수행하지 않았다면 f3가 복사 후 모든 수정 사항을 보유하고 있음을 알 수 있습니다 (f2). 이제 이식을 사용하여 이후의 모든 변경 사항을 HGSVN으로 가져올 수 있습니다. 예, sha1-sum은 변경되었지만 HGSVN에는 현재 개발 기록이 모두 포함되어 있으므로 다른 저장소에 대해서는 잊어 버릴 수 있습니다.

BTW. 실제 이식을하기 전에 백업 복제를하는 것이 좋습니다. 명령을 잘못하면이 방법으로 다시 할 수 있습니다. 희망이 도움이됩니다.

+0

좋은 생각입니다. 하지만 여전히 공중에 손을 던져서 가치있는 것보다 더 많은 일을한다고 말하고 있습니다.) – nedlud