2010-12-16 3 views
18

내 프로젝트는 현재 이러한 각 폴더는 완전히 독립적 의욕 저장소입니다 다음 위치수은 하위 저장소는 기본 저장소의 하위 디렉토리 여야합니까?

C:\Dev\ProjectA 
C:\Lib\LibraryB 
C:\Lib\LibraryC 

의 코드로 구성되어 있습니다. 프로젝트 A는 항상 변경되며, 라이브러리 B와 라이브러리 C는 거의 변경되지 않습니다.

현재 Project A의 각 버전이 출시 될 때마다 태그를 붙이고 있습니다 (기억할 때) 라이브러리 B 및 C 저장소에 해당 태그를 넣습니다.

하위 리포지토리를 사용하여 개선 할 수 있습니까? 라이브러리 B와 C를 프로젝트 A의 하위 디렉토리로 만들 필요가 있습니까?

라이브러리 B와 C가 프로젝트 A의 하위 디렉토리에 있어야하는 경우 라이브러리 B를 사용하지만 프로젝트 A와 전혀 관련이없는 프로젝트 D를 시작하려면 어떻게해야합니까?

답변

18

도서관 B와 C는 내가 라이브러리 B를 사용하는 프로젝트 D를 시작하려면 내가 할 않는 어떤 프로젝트 (A)의 하위 디렉토리이어야합니다하지만 모든 프로젝트 A의 제휴 달리 하지?

모든 프로젝트는 동시에 다른 프로젝트의 하위 리포지토리로 모두 존재할 수 있습니다. 워크 플로를 제안하여 설명하겠습니다. 모든

첫째, 각 프로젝트의 (A, B, C)은 어딘가에 게시 된 축복 저장소가 있어야합니다

blessed repository

당신은 자신의 서버에 hgwebdir를 실행하거나 사용을 만들 수 Bitbucket 또는 Kiln과 같은 Mercurial 호스팅 서비스. 이렇게하면 개발자는 변경 사항을 가져 오거나 푸시 할 수있는 중심적인 권한을 얻게되며 백업 할 항목이 생깁니다.

이제이 저장소의 클론이 두 가지 방법으로 작업 할 수 있습니다 :
  • 직접 프로젝트를 복제. 예를 들어 :

    hg clone http://bitbucket.org/LachlanG/LibraryB C:\Lib\LibraryB 
    
  • 및/또는 을 다음과 같은 내용으로 ProjectA의 루트에 .hgsub 파일을 넣어 subrepository 정의을 만듭니다

    libraries/libraryB = http://bitbucket.org/LachlanG/LibraryB 
    libraries/libraryC = http://bitbucket.org/LachlanG/LibraryC 
    

이 subrepository 정의는 의욕에게 그 프로젝트 A가 복제 될 때마다 라이브러리 B와 라이브러리 C의 클론을 libraries 폴더에 넣어야합니다.

프로젝트 A에서 작업하고 커밋하는 경우 libraries/LibraryBlibraries/LibraryC의 변경 사항도 커밋됩니다. Mercurial은 .hgsubstate 파일의 Project A에서 사용중인 라이브러리 버전을 기록합니다. 그 결과, 지난 주에 어떻게 작동했는지 확인하기 위해 이전 버전의 프로젝트에 hg update을 입력하면 해당 버전의 라이브러리가 제공됩니다. 태그를 만들 필요조차 없습니다 :-)

hg push 프로젝트 A가 축복받은 저장소로 변경되면 Mercurial은 하위 저장소의 변경 사항을 먼저 자신의 원본으로 푸시해야합니다. 그렇게하면 게시되지 않은 라이브러리 변경에 의존하는 프로젝트 변경 사항을 우연히 게시하지 않습니다.

모든 것을 로컬로 유지하려는 경우에도 하위 저장소 정의에서 URL 대신 상대 경로를 사용하여이 워크 플로를 계속 사용할 수 있습니다.

+0

여기서 문장의 끝에 언급 한 라이브러리 폴더는 "이 하위 저장소 정의는 projectA가 복제 될 때마다 라이브러리 폴더에 LibraryB 및 LibraryC의 복제본을 넣어야한다는 것을 인정합니다." – LachlanG

+0

그것의 단지 폴더, 라이브러리의 왼쪽 부분 : library/libraryB = http://bitbucket.org/LachlanG/LibraryB 오른쪽에서 복제본은 –

+0

@ LachlanG이어야합니다 : ProjectA의 루트에 나타납니다 예를 들어 'C : \ Dev \ ProjectA \ libraries \'와 같이 복제 할 수 있습니다. –

2

프로젝트 ABC 하위 리전을 실제로 선언 할 수 있습니다 (이들은 Mercurial Subrepository에 설명 된 것처럼 하위 디렉토리로 나타납니다). (아래 A과)

  • 한 곳에서 모두의 repos를 얻을 수
  • 참조 A
  • 태그 각에서 정확한 B의 태그와 C을 : 그것은 당신이 허용하는 것처럼 당신의 분리 장치를 개선 할
    sub-repo가 ​​처음 수정 된 경우
  • 태그 ABC 태그에 대한 정보가 포함되어 있습니다 (A의 모든 복제본은 exa를 얻을 수 있습니다). A에서 사용 BC의 CT 태그)

또한 A 독립적으로, D의 subrepo로 B을 선언 할 수 있습니다. A (B에 대해)에서 작성한 내용은 B에 사용 된 D에 아무런 영향이 없습니다.

관련 문제