2011-01-24 2 views
5

상당히 표준 소스 트리 접근 + 수은 subrepositories를 사용하는 마스터 프로젝트가 있습니다.Mercurial subrepositories - 더 복잡한 종속 계층 관리

이제 Sub2가 Sub1의 코드를 필요로하므로이 새로운 종속 구조를 조정해야합니다.

물론 문제는 위와 같은 방법으로 Sub1을 Sub2의 하위 리포지토리로 추가하면이 추악한 상황이 발생한다는 것입니다.

\source\contrib\Sub2\source\contrib\Sub1 

마스터에는 이제 Sub1!

그래서 내가 subrepos (=의 RHS)를 참조 할 때 상대 경로를 사용해야한다는 것을 알고 있습니다.하지만 이해할 때 여기에는 내 시나리오가 도움이되지 않습니다. LHS를 외부의 외부에 게시 할 수있는 방법이 없다고 생각합니다. 이 내가 정말로 필요한 곳입니다.

이 문제를 해결하는 방법에 대한 몇 가지 아이디어가 있지만 아무도 나와 맞지 않습니다. 더 좋은 방법이 있어야한다고 생각합니다. 저의 이상적인 해결책은 여러 복사본을 가지고있는 형벌을 지불하면서 여러 프로젝트에서 동일한 하위 repo를 공유 할 수있게 해줍니다. 그건 그냥

  1. 뿐만 SUB1 제거 (나도 같은 HG 버전을 사용하는 것이 아니라 독립적으로 revisioned되고 SUB1에 대한 종속성이있는 모든 프로젝트를 가지고 싶습니다 플러스) 여기 내 시나리오에서 낭비와 비효율적 인 것 같습니다 마스터의 하위 리포지토리를 만들고 마스터 솔루션의 상대 경로를 변경하여 이중으로 중첩 된 Sub1을 참조합니다. 이 경로 구조가 끔찍 할뿐만 아니라 Sub1에 대한 종속성이있는 마스터에 Sub3을 추가하면 여전히 Sub1 사본이 두 개 있습니다.

  2. Sub1의 복사본을 컴파일하고 \ lib 디렉토리에 고정하십시오. Sub1은 여전히 ​​churn을 겪고 있으며 소스 버전에 비해 빌드하려고합니다. 나는 끊임없이 새로운 바이너리를 소스 트리에 항상 복사하는 세금을 지불하고 싶지 않고 (그리고 나무를 부풀게한다.)

  3. Sub1에 대한 Sub2의 종속성을 어떻게 든 상연합니다. 저장소의 아키텍처를 기반으로, 이것은 아마도 일어나지 않을 것입니다. Sub1은 매우 일반적인 용도의 공유 라이브러리 코드를 포함합니다. Sub2에는 클라이언트 SDK와 서버 구현이라는 두 개의 매우 다른 프로젝트에서 필요한 WCF 서비스 계약/인터페이스/유형이 포함되어 있습니다. 현재이 저장소를 분리 된 상태로 유지하는 것이 좋습니다.

어쩌면 나는이 잘못에 대해 생각하고 있습니다. 아니면 어쩌면 내가 약간의 hg 트릭을 알지 못합니다.

도움을 주시면 감사하겠습니다.

답변

2

나는 바이너리를 체크인하는 것을 잊어 버린다. 단지 저장소가 팽창한다는 것이다. IMO에서 빌드의 모든 출력을 소스 리포지토리에 저장해서는 안됩니다.

Sub2가 ../Sub1에서 Sub1을 찾으려면 어떻게해야합니까? 그런 다음 Sub1과 독립적으로 Sub2에서 작업해야하는 경우 Sub1 및 Sub2를 sub-repos로 가져 오는 "Sub2_standalone"저장소를 만듭니다.

그래서, 모든 작업을 할 때, 당신은 얻을 것이다 :

Master/ 
Master/source/contrib/Sub1 
Master/source/contrib/Sub2 

하지만 그냥 Sub2라는 작업시 :

Sub2_standalone/ 
Sub2_standalone/Sub2 
Sub2_standalone/Sub1 
+0

잘 수 wouly GNU/리눅스에

, 그건 내 생각 완전히 끔찍한 해결책이 아니다 그리고 나는이 '형제'유형 설정에서 한 내가 항상 곁에 의존하는 코드를 가지고 문제를 해결해야한다고 생각 . 물론 나는 형제들을 함께 지키기 위해서 Mercurial에 추가 저장소를 갖게 될 것이지만 그것은 내가해야하는 절충일지도 모릅니다. 아이디어를 가져 주셔서 감사합니다 - 나는 그것을 고려하지 않았습니다. –

+0

대답을 아직 채울 준비가되지 않았습니다. 셀렌의 누군가가 "모범 사례"로 소리를지를 것을 기대합니다. 0 –

+0

저장소 내 파일에 하드 링크를 사용해야하므로 추가 저장소가 손상되지 않아야합니다. –

0

중첩 된 구조는, 당신이 심볼릭 링크를 사용할 수 있음을해야하는 경우 Sub1의 두 버전이 항상 같은 개정판에 있음을 보장하기 위해 Sub2 아래의 Sub1. 그러면 실제로 Sub1의 버전이 하나뿐입니다. 원하는 버전 인 것 같습니다. 이 간단한 ln -s source/contrib/Sub1 source/contrib/Sub2/source/contrib/Sub1

+0

그래, 우리는 여기에 윈도우에있어. 나는 그런 것을 고려해 봤지만, 이해할 수있는 것에서는 심볼릭 링크가 NTFS 접속점으로 변환되지 않고 파일의 일종으로 번역됩니다. 나는 그 경로를 가지 않는 것을 선호한다. –

+0

나는 LinkShell 도구 (http://lifehacker.com/5530931/link-shell-extension-creates-windows-symlinks-with)를 통해 동일한 효과를 내기 위해 Windows 내에서이 전술을 실제로 사용했다. -용이함) –

관련 문제