8

Subrepos를 사용하여 Mercurial에서 프로젝트를 설정하는 데 문제가 있습니다.Mercurial에 하위 레프를 중첩시킬 수 있습니까?

목표 :

-- Build_Repo (this repo will be used to track dependencies) 
    -- Subrepo_A (this is the main source) 
    -- Modules (Part of Subrepo_A) 
     -- Subrepo_B 

을 그래서이 세 가지의 repos는 다음과 같습니다 : 내가 지금 같은 구조를 설정할

하는 빌드와 B B는 내부에 중첩는, A는 루트 빌드 저장소 내부에 중첩됩니다. 빌드 레포는 의존성을 추적하는 데 사용되며, 서브 레포 A는 기본 소스 파일을 추적하는 데 사용되며 서브 레포 B (및 기타)는 모듈/플러그인 개발을 추적하는 데 사용됩니다.

문제/질문

나는 초기 빌드의 repo 단순히 .hgsub 파일에 Subrepo_A 경로와 소스를 추가하고 빌드 REPO에 투입하여 중첩 된 Subrepo_A을 설정 아무런 문제가 없습니다.

중단 : 내가 빌드의 repo의 .hgsub에 subrepo_B 경로/소스를 추가 한 다음 나는 오류 메시지가 얻을 커밋하려고 후에 그러나, 경로 'Subrepo_A/모듈/Sebrepo_B을'입니다 내부 중첩의 repo ' Subrepo_A '

Mercurial은 이미 중첩 된 저장소에 중첩 된 저장소를 좋아하지 않는 것처럼 보입니다. 이게 사실인가요, 아니면 제가 빠진 것이 있습니까? 빌드/종속성을 관리하는 방법에 대한 더 좋은 아이디어가 있습니까?

+0

사용중인 언어/툴 세트는 무엇입니까? 일반적으로 의존성 관리로서의 서브 리포지터리는 차선책입니다. 나는 모듈을 만들고 그것의 유물 (넥서스, 인공물 등)을 게시하고 종속 모듈을 사용하여 모듈을 소비하는 것을 좋아합니다. – thekbb

답변

0

상황에 따라 subrepoA에 subrepoB를 추가해야합니다.

당신의 트리가 2 레벨 만 가질 수 있도록 의존성을 옮기는 것이 좋지만, 가능하지 않을 수도 있습니다. 그렇지 않다면 항상 매끄러운 경험이 아닙니다.

+1

이 상황에서 종속성을 관리하는 방법에 대한 다른 권장 사항은 무엇입니까? –

+0

이것에 대한 해답은 다른 사람들이 지적한 것처럼 subrepoB를 subrepoA의 subrepo로, subrepoA를 build_repo의 subrepo로 만드는 것입니다. 당신이 어떤 이유로이 일을하고 싶지 않은 것처럼 보입니다. SubrepoA가 제어 할 수없는 프로젝트의 복제본이기 때문에 Subrepo를 추가 할 수 없으면 SubrepoA의 개인 fork/clone을 만들고이를 " subrepoA ". 그렇게하면 사용자 지정 내용을 추가하고 (subrepo 추가) subrepoA의 pulic/external 업데이트와 계속 동기화 할 수 있습니다. –

1

여기에있는 문제는 Mercurial의 피할 수없는 제약 중 하나입니다. 저장소는 컴퓨터의 폴더 트리에 해당합니다. 저장소는 해당 폴더 트리 아래의 모든 것을 담당합니다.

최상위 레벨 리포지토리에 하위 리포지토리가 포함되어 있으면 폴더 구조의 해당 부분에 대한 하위 리포 완전 제어권을 넘겨줍니다. 따라서 최상위 레벨은 첫 번째 하위 repos 폴더의 다른 하위 저장소를 지정할 수 없습니다.

용액 1

Subrepo_B 실제로 Subrepo_A의 의존성이다. 이 경우 Subrepo_A의 .hgsub 파일을 편집하여 Subrepo_B를 Modules/Sebrepo_B 아래에 추가하여 리포지토리에 진정한 종속성을 반영하십시오. Subrepo_A는 해당 폴더에 대한 제어 권한을 보유하므로이 방법이 효과적입니다.

해결 방법 2

Subrepo_A는 Subrepo_B에 의존하지 않는 당신은 편의를 위해 거기두고 있었다. 이 경우 Subrepo_A와 Subrepo_B를 모두 Build_Repo의 다른 위치에 서브 레프로 만들어야합니다.

관련 문제