문제

다음 레이아웃이있는 전복 리포지토리가 있습니다.

svnrepo/projectA/trunk
svnrepo/projectA/tags
svnrepo/projectA/branches
svnrepo/projectB/trunk
svnrepo/projectB/tags
svnrepo/projectB/branches


수정 된 레이아웃을 통해 Mercurial Repo로 이동하고 싶습니다.
Hgrepo/Projecta
hgrepo/projectb

이것을하는 가장 좋은 방법은 무엇입니까? 내 생각 중 일부는 다음과 같습니다.

옵션 1

전복 (SVN 이동 사용)의 경로를 중간 형식으로 재 배열하십시오.

svnrepo/trunk/projectA
svnrepo/trunk/projectB
svnrepo/tags/projectA
svnrepo/tags/projectB
svnrepo/branches/projectA
svnrepo/branches/projectB

그런 다음 HG는 svnrepo/트렁크에서 변환합니다. 이것이 HG 수입을 혼동할까요?

옵션 2HG는 각 프로젝트/트렁크를 별도의 HG 저장소로 변환합니다. 그런 다음 단일 HG Repo (HG Init, HG Pull -F Projecta 등 사용)로 병합하십시오. 나는 이것이 첫 번째 수입 프로젝트에서 지점 이름과 태그를 잃을 것이라고 생각합니다.

도움이 되었습니까?

해결책

Mercurial에서는 관련없는 코드베이스를 동일한 저장소에 저장하는 것이 나쁜 생각입니다.

  • 합병을 크게 복잡하게합니다. 합병은 변경 사항에 따라 다릅니다 모두 합병하려는 프로젝트가 아니라 프로젝트.
  • 원인 저장 및 체크 아웃 오버 헤드 - 내가 아는 한 Mercurial은 저장소의 하위 디렉토리 만 확인하는 것을 지원하지 않습니다. 모든 프로젝트를 한 번에 분기해야합니다.

솔루션은 단일 하중 저장소를 여러 수은 저장소로 변환하는 것입니다. 대부분의 변환 도구가이를 지원합니다.

다른 팁

각 프로젝트는 자체 HG 저장소에 있어야합니다 (특정 프로젝트 만 얻거나 태그를 붙일 수 있음).

Subversion (트렁크, 태그, 가지)에 보이는 디렉토리는 현대 (D) VC에 존재하지 않을 것입니다. 여기서 지점과 태그는 1 등석 시민 (즉, 도구가 직접 관리하는 메타 데이터)입니다. a 저렴한 사본 (SVN).

즉, SVN 리포지토리를 변환 할 때 HG Repo의 역사에서 "트렁크", "태그"또는 "분기"디렉토리를 직접 저장해서는 안됩니다.

차라리 사용해야합니다 도구와 같은 도구 hgsubversion SVN Repo (예 : "Repo/Projecta")를 Projecta 전용 HG Repo로 가져옵니다. Orignal SVN 프로젝트의 태그와 분기를 유지하고 HG 객체로 변환합니다.
에서 문서:

사용하는 모든 업데이트 hgpullsvn SVN URL의 마지막 구성 요소에서 지명 된 분기에서 제작됩니다 (예 : SVN URL이 svn://server/myproj/branches/feature-ZZZ, hgpullsvn 이름이 지정된 분기를 생성하고 사용합니다.feature-ZZZ')


"변환"을 원하지 않고 "동기화"를 원한다면 Tonfa 추천하다 hgsubversion, 그것은 "현재 심한 리팩토링으로 인해 플럭스 상태에 있지만":

지금은입니다 ~ 아니다 생산 사용 준비. 해킹 할 준비가 된 경우에만 사용해야하고 수은 및/또는 전복의 내부에 다이빙을해야합니다.

부터 hgsvn 또한 일부 동기화를 허용합니다 hgpushsvn 그리고 hgpullsvn... 나는 고집 할 것이다 hgsvn 지금은.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top