2012-01-16 1 views
5

응용 프로그램 버전이 1.0입니다. 이제 버전 2.0에서 작업을 시작해야하지만 동시에 버전 1.0에서 버그를 유지 관리하고 수정하십시오.Mercurial에서 두 버전의 프로젝트 작업을위한 워크 플로

1.0의 버그 수정은 2.0 릴리스로 통합되지만 2.0에서 1.0 릴리스로 새로운 기능은 백 포트되지 않습니다.

분기가 작동하는 방식을 이해하지만 동일한 작업 폴더에서 분기를 전환하는 것이 실용적이지 않으므로 동시에 두 버전 모두에서 작업 할 수 있어야합니다. 동시에 두 버전의 코드를 모두 실행할 수 있기를 원합니다.

같은 응용 프로그램의 두 버전을 동시에 명명 된 분기를 사용하여 작업 할 수있는 일반적인 설치 또는 워크 플로 란 무엇입니까? 즉 한 폴더의 한 분기와 다른 폴더의 다른 분기로 작업하고 있습니까?

2.0의 새 폴더에 저장소를 복제하고 분기를 2.0 릴리스로 설정 했습니까?

나는 약간의 의욕이 생겼다. 그래서 조금 순진하게 들리면 용서해주세요.

+1

시도해보십시오. http://nvie.com/posts/a-successful-git-branching-model/ GIT를 겨냥했지만 Mercurial에서는 작동합니다. 그것은 당신의 문제에 도움이 될 수 있습니다 – PostMan

+0

나는 당신이 제안한 것과 정확히 똑같이 할 것입니다 : 코드를 체크 아웃 (복제) 한 버전을 버전 1.0과 버전 2.0 중 하나씩 가지고 있습니다. –

답변

7

버전 2.0의 새 폴더에 저장소를 복제하고 분기를 2.0 릴리스 용으로 설정합니까?

예, 각 주요 출시에 대해 별도의 복제본을 사용해도 문제가 없습니다. 그러나 주요 개발 내용은 on the default branch으로 유지하고 각 주요 릴리스에 명명 된 분기를 사용해야합니다.

버전 1.0가 완료되면, 당신이 할

$ cd ~/src/foo 
$ hg tag 1.0 
$ hg push http://your-server/foo 

그리고 당신은 버전 2.0으로 그 클론에서 작업을 계속할 수 있습니다 : 나 워크 플로우를 통해 실행하자. 당신은 1.0의 버그를 수정해야 찾을 때, 당신은

$ cd ~/src 
$ hg clone http://your-server/foo foo-1.x 
$ cd foo-1.x 
$ hg update 1.0 
$ hg branch 1.x 
$ hg commit -m "Starting 1.x branch" 
# now fix the bug... left as an exercise to the reader :) 
$ hg commit -m "Fixed issue123" 
# do QA to test the bugfix, make more commits as necessary 
$ hg tag 1.1 
$ hg push --new-branch 
# make a release 

--new-branch 플래그 당신이 밀어 처음에만 필요합니까. 그것은 Mercurial에게 당신이 정말로 역사에 새로운 영원한 지부를 만들고 싶다고 말합니다.

는 이제 다른 저장소에 버그 수정을 당겨하려면 :

$ cd ~/src/foo 
$ hg pull http://your-server/foo 
$ hg merge 1.x 
$ hg commit -m "Merge with 1.1" 

1.x에서 시리즈에 대한 named branch를 사용하여, 당신은 항상 해당 분기의 최신 변경 집합에 가서 hg update 1.x을 사용할 수 있습니다. 1.x은 항상 해당 지점의 가장 많은 변경 집합을 가리키는 "부동 태그"로 생각하십시오.

이 워크 플로는 standard branching wiki page에 설명되어 있습니다.

+1

+1. 아마 기본 Mercurial에서 주목할 가치가있는 것은, 1.x 브랜치에서 강제로 밀어 넣기 위해'hg push -f'가 필요하다고 생각할 것입니다. 왜냐하면 여러분이 새로운 헤드를 밀었을 것이기 때문입니다. 이것은 "강제로" .단일 개발 라인에서 추가 헤드는 일반적으로 병합으로 처리되지만, 여기서는 원하는 헤드 라인이 아닙니다. – icabod

+1

@icabod : 감사합니다.'--new-branch' 플래그를 잊어 버렸습니다. 이것은 여러개의 헤드를 푸시하지 않고 새로운 브랜치를 푸시 할 수있게 해주는 좀 더 제어 된 형태의'-f'입니다. –

+1

아, 이전에'--new-branch '를 사용하지 않았습니다. 아마도'--new-branch'가 작동하지 않는 익명의 브랜치를 생성하는 성가신 버릇이있을 수 있습니다. 'Tis는 나뭇 가지에 잘 어울린다.' 나는 그것을 미래에 사용할 것이다 :) – icabod

관련 문제