2013-03-06 1 views
4
의욕

와 subrepositories에 기본값으로 기능 분기를 병합 이제 기본 분기로 다시 병합하고 싶습니다. 기능 1 분기가 작성된 이후 기본 분기에는 변경 사항이 없습니다.은 어떻게 subrepositories 수많은 프로젝트가

그러나 기본값으로 분기 병합을 시도했지만 하위 리포지토리에서 이상한 일이 발생했습니다.

$ hg checkout default 
    1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
$ hg merge feature1 
    1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
    (branch merge, don't forget to commit) 
$ hg status -S 
    M .hgsubstate 
$ hg commit -S -m "branch merge test" 
    nothing changed 
$ hg branches 
    default      19:c2398dc23428 
    feature1      17:98dc0efbad90 (inactive) 

은 무엇 이상한 것은 많은 파일이 모듈 subrepository 변경되었다하더라도, 병합은 1 것을 주장이다 :

나는 다음과 같은 결과를이 other post의 지침을 따라 얻을 것 파일이 업데이트되었습니다. 나는 이것이 .hgsubstate 일 것이라고 추측합니다.

$ cd src/module 
$ hg update 
    39 files updated, 0 files merged, 23 files removed, 0 files unresolved 
$ cd ../.. 
$ hg commit -S -m "feature1 merge" 
    committing subrepository src 
$ hg status -S 
    M .hgsubstate 

그래서 작업 디렉토리에있는 모든 변화를 가져올 수있는 HG 업데이트을 수행 한 후, 나는 모듈의 변경 사항을 참조하십시오 내가 명시 적으로 subrepository를 업데이트 할 때

, 나는 다음과 같은 수 커밋해야하는 하위 저장소 그러나 .hgsubstate은 항상 수정 된 상태로 유지됩니다. 나는 hg를 제거했습니다.을 제거하십시오. 나는 시도했다 hg는를 잊는다. 그러나 내가 무엇을 하든지 hg 상태을 수행하면 여전히 표시가됩니다.

그래서 제 질문은 다음과 같습니다

  1. 내가 (존재 고려 subrepositories) 올바른에 지점을 병합했다 과정이 되었습니까?
  2. 주 저장소에서 변경 사항을 인식하게하려면 하위 저장소에서 hg 업데이트을 수행해야합니까?
  3. .hgsubstate이 잘못 되었나요?

답변

2

사용중인 hg의 버전을 말하지 않습니다. 서브 페어 지원이 일정 기간 동안 일정량을 변경했습니다. 방금 hg v2.8의 3 가지 서브 레벨 레벨로 테스트를 해보았습니다.

최상위 레벨에서 더러운 .hgsubstate를 가져 오면 서브 페어를 커밋 할 때 정상입니다. [subrepo 만 독립적으로 커밋 된 경우 .hgsubstate 만 최상위 수준에서 더러워집니다.] 그런 다음 최상위 수준으로 올라가고 해당 수준에서 커밋하면 .hgsubstate가 커밋되고 모든 것이 정상입니다. 최상위 레포는 파일과 비슷한 방식으로 하위 레포를 추적한다는 것을 기억하십시오. 최상위 커밋마다 서브 레포에서 특정 변경 집합을 커밋합니다.

FWIW. 권장되는 방법은 하위 리포지토리를 개별적으로 커밋하는 것입니다. 즉, 하위 리터가 더러운 경우 최상위 수준에서 커밋하지 마십시오.그 이유는 하위 레파지가 다른 커밋 메시지를 요구하기 때문입니다. 원한다면 최상위 수준에서 커밋 할 수 있습니다. 귀하의 경우 3 단계에서 순서는 다음과 같습니다 :

cd src/module 
hg commit -m "src/module commit reason" 
cd .. 
hg commit -m "src commit reason" 
cd .. 
hg commit -m "top level reason" 

하위 레 포지가 드물게 변경 될 수 있습니다. 타사 라이브러리. 하위 작업 영역이 자주 변경 될 경우, 특히 다른 사람들과의 작업시 실수를 피하기 위해 경계해야합니다. [그러나 질문의 ​​날짜가 주어지면 지금까지 스스로 해결했습니다.]