2012-01-17 2 views
2

우리는 각 새로운 기능에 고유 한 분기가있는 개발 플로우를 구현합니다.이 분기는 완료 될 때 기본 분기로 병합됩니다. 문제는 첫 번째 지형지 물에서 새로운 repo의 첫 번째 커밋이 발생한다는 것입니다. 푸시되면 기능 분기가 기본값이됩니다. 해당 분기와 관련된 변경 집합이 없으므로 "default"라는 분기가 없습니다. 분명한 것은이 기능 브랜치를 (존재하지 않는) 기본 브랜치에 병합 할 때가되면 문제가되는 것입니다.첫 번째 커밋이 다른 분기에있을 때 기본 분기 유지

나에게 일어나는 유일한 해결책은 새 프로젝트가 시작될 때마다 컨벤션으로 기본 커밋을 먼저 수행하여 다른 모든 분기의 부모 인 "default"라는 지점을 갖도록하는 것입니다. 더미 커밋을 필요로하지 않는 더 깨끗한 방법이 있습니까 (예 : "기본값으로 빈 변경 집합 커밋")?

답변

2

default을 주 개발 지점으로 유지하는 것이 좋을 때 Martin의 대답을 고려하면 두 가지 가능성을 알 수 있습니다.

Martin은 이미 다루었으므로 새로운 저장소에서 가장 먼저해야 할 일은 "초기 설정"입니다. 일반적으로 표준 템플릿 .hgignore 파일을 포함 할 수 있습니다. 덧붙여서 나는 이것보다 더 나은 선택이라고 생각한다 ...

다른 이름의 브랜치를 이미 커밋했다면, null changeset (작업 디렉토리 비우기)로 업데이트 한 다음 merge으로 업데이트하면된다. 그러면 "default"라는 분기가 만들어집니다.

먼저 우리는 개발 분기에 몇 가지 작업을 할 수 있습니다 :

C:\tmp\test>hg init . 
C:\tmp\test>hg branch devbranch 
marked working directory as branch devbranch 

C:\tmp\test>echo something > out.txt 
C:\tmp\test>hg add . 
adding out.txt 

C:\tmp\test>hg commit -m "some work" 
C:\tmp\test>hg log 
changeset: 0:4631a4a10552 
branch:  devbranch 
tag:   tip 
summary:  some work 

는 여기에서 우리는 하나 우리의 devbranch 분기에 커밋합니다. 작업이 완료되면 (이 경우에는 우연히), 우리는 작업을 우리의 (존재하지 않는) default 브랜치로 병합하고자합니다. 그래서 우리는 null하기 전에 병합을 수행 업데이트 : 당신이 볼 수 있듯이

C:\tmp\test>hg update null 
0 files updated, 0 files merged, 1 files removed, 0 files unresolved 

C:\tmp\test>hg merge devbranch 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
(branch merge, don't forget to commit) 

C:\tmp\test>hg commit -m "merged" 
C:\tmp\test>hg log 
changeset: 1:55e879b67c69 
tag:   tip 
parent:  -1:000000000000 
parent:  0:4631a4a10552 
summary:  merged 

changeset: 0:4631a4a10552 
branch:  devbranch 
summary:  some work 

C:\tmp\test>hg branches 
default      1:55e879b67c69 
devbranch      0:4631a4a10552 (inactive) 

, 분기 default 두 부모, -10을 가진 해당 분기의 첫 번째 변경 집합 생성됩니다.이 후 병합하고자 할 때 default 브랜치의 팁으로 업데이트하면 hg update null 만 처음 수행됩니다.

+0

내 질문에 대한보다 문자적인 대답이기 때문에 받아들입니다. 필자는 Martin에서 실제로 기능을 수행하기 전에 기본 분기에 커밋 할 상용구, 구성 파일, README 등을 가질 가능성이 있음에 동의합니다. 그러나 나중에 기본값으로 병합 할 수 있도록하기 위해 할 필요가 없다는 것을 알면 좋습니다. –

+0

이 답변을 사용해 주셔서 감사합니다. 나는 내 글을 쓸 때 정말로 원했던 것에 대해 의심 스러웠다. 'hg branch default'로 기본 브랜치를 만들 수도 있습니다 ... 내가 볼 수있는 한,'null'로 업데이트하고 펑키 머지를 할 필요가 없습니다 :-) 일반적인 변경 집합은 두번째로'null'을 갖습니다 부모의. 병합 변경 집합에는 부모가 아닌 두 개의 '널 (null)'변경 집합이 있습니다. 첫 번째 부모로'null'을 사용하여 정상적인 변경 집합을 만들었습니다. 결과는'hg branch default '다음에'hg commit'이 뒤 따르는 것과 큰 차이가 없습니다. –

+0

아 좋아요. 나는 디폴트 브랜치가'hg 브랜치 디폴트 '이후에 널이 아닌 부모로 끝난다는 사실을 싫어했다. 물론 null과 병합 한 경우도 마찬가지입니다. 어쨌든, 나는이 토론에서 hg에 대해 조금 더 배웠다. 그것은 굉장하다. 실제로 우리는 분기하기 전에 무언가를 디폴트로 착륙시킬 것이라고 확신 할 것입니다. –

3

Mercurial을 사용하면 default 브랜치없이 작업 할 수 있지만 권장하지 않습니다. 우리 wiki page는 말한다 :

는 주요 개발 브랜치

의욕의 주요 지점은 "기본"이라고 및 유사가 "트렁크"SVN에서, "HEAD에 대한 기본이 아닌 다른 이름을 사용하지 마십시오 CVS에서, "마스터"는 Git에서. 새 복제본이 체크 아웃 한 분기입니다. "main"브랜치에 대해 다른 이름을 사용하려고 시도하면, 사용자는 잘못된 장소에서 복제하고 커밋 할 때 어느 정도의 랜덤 브랜치를 갖게되며 일반적으로 바람직하지 않습니다.

따라서 default 브랜치를 기본 개발 분기로 설정해야합니다.

"모든 시간"기능 브랜치에서 작업하려면 프로젝트를 시작할 때 default 브랜치에서 몇 가지 커밋을 수행하는 것이 좋습니다. 대부분의 프로젝트에는 일반적인 설정이 약간 필요하므로 이상하거나 이상하다고 생각하지 않습니다.

관련 문제