2010-01-20 2 views
7

그래서 지금은 Ruby on Rails를 배우고 있으며 "Agile Web Development with Rails"라는 책을 통해 작업하고 있습니다. 분산 된 SCM을 읽었 기 때문에 Mercurial을 사용하기로 결정했습니다. 이상적인 상황 인 것 같습니다. 그러나 나는 여전히 내 하드 드라이브가 잠수를 결정할 때 내 Linux VPS에 원격으로 코드를 푸시하는 것을 선호합니다.Mercurial SCM으로 분기

제 질문은 Mercurial에서의 분기에만 해당됩니다. 지금은 원격 저장소를 설정했고 SSH를 통해 변경 사항을 쉽게 푸시 할 수 있습니다 (지옥에서도 Push 할 수있는 Nginx FastCGI 사이트를 설정하기도합니다). 그러나 제가하고 싶은 것은 제가 각 장의 지부를 만드는 것입니다. 그래서 나는 책을 통해 나의 진보의 좋은 조직 된 역사를 유지할 수 있습니다.

 
pushing to ssh://myserver/hg/depot 
searching for changes 
abort: push creates new remote branch 'chapter-10'! 
(did you forget to merge? use push -f to force) 

그래서이 시점에서 내가 다시 hg merge을하려고하고 : 나는 푸시 문을 실행하면

 
$ hg branch chapter-10 
(do chapter 10 stuff) 
$ hg commit -m "Chapter 10 complete" 
$ hg update default 
$ hg merge chapter-10 
$ hg commit -m "Merging chapter 10 into default" 
$ hg push 

, 나는 의욕이 메시지를 얻을 : 그래서 내가 뭘하는지입니다 병합 할 것이 없다고 알려줍니다. 병합했기 때문에 분명히 사실입니다. -f를 사용하여 강제로 밀어 넣을 때 모든 것이 잘된 것처럼 보이며 웹 인터페이스조차도 적절한 분기를 보여줍니다.

요약하면, 내 질문은 간단합니다. 올바른 방법입니까? Mercurial (즉, "Mercurial way")에서이를 수행하는보다 적절한 방법이 있습니까? 솔직히 저장소를 백업으로 사용하기를 원합니다. 나는 분산 된 SCM 모델의 팬이지만 나에게 그것은 밀어 넣기를 강요하는 일종의 "더러운"느낌이다. 어떤 통찰력이라도 대단히 감사합니다! 미리 감사드립니다.

+0

당신의 의도는 무엇입니까? a) 챕터를 통해 작업하면서 일련의 체크 포인트를 가지고 있거나 b) 다른 챕터에서 여러 챕터를 동시에 편집 할 수 있도록하려면? – Tarydon

+0

옵션 A가 여기에 있지만, 팀 시나리오에서 옵션 B에서도 가치를 볼 수 있습니다. –

답변

6

push -f은 경우에 적합한 옵션이며,이 "push creates new remote branch"경고 팝업 때 명령을 추가하기 위해 지난 달 토론을 있었다 : issue 1513를 참조하십시오.

그러나 이번 달에는 issue 1974에 몇 가지 바람직하지 않은 영향에 대해 언급했습니다.
원격 저장소에서 두 번째 헤드를 만드는 방법에 대한 자세한 내용은 translated article을 참조하십시오. 더 일반적인 점에


, 병렬에 장을 작성하는 경우에는 지점을 사용할 수 있습니다, 당신은 시간

에 그러나 당신의 쓰기 과정 경우 특정 (안정) 지점에서 병합 할 더 직선적 인 경우, 하나의 브랜치만을 사용할 수 있으며 길을 따라 일부 태그를 넣을 수 있습니다.
그러나 10 장으로 돌아가서 몇 줄을 추가하면 태그 11과 12를 이미 넣었을지라도 더 쉽게 읽을 수 있습니다.그래서이 경우에는 가지가 여전히 좋은 생각입니다.

+1

링크를 제공해 주셔서 감사합니다. 매우 유익한. 태그가 더 적합한 곳에 분기를 사용하려고하는 것처럼 보입니다. –

4

귀하의 특정 문제에 대해 잘 모릅니다. 그러나 귀하의 의견에 따르면 아마도 태그를 사용하고자하는 지점을 사용하고있는 것으로 보입니다.

분기는 일반적으로 여러 사람이 같은 프로젝트에서 협력하고 작업 분리를 만들어 안정적인 코드 조각을 작업 할 수 있도록 작업 분리를 만들기 위해 사용되는 반면, 다른 하나는 실험적으로 기능을 일시적으로 중단시키는 작업을 수행합니다. 다른 방법으로는 분지를 사용하여 방출을 안정화하는 한편 개발은 줄기에서 진행합니다.

태그 (또는 레이블)는 주로 코드 버전의 중요성을 나타내는 마커를 만드는 데 사용됩니다. 예를 들어, 챕터 10의 완료를 표시하려면 모든 현재 버전에 'chapter-10'태그로 태그를 지정하면됩니다. 가지 않아도됩니다. 어떤 이유로 든 필요한 경우 향후 언제든지 태그가 추가 된 버전에서 브랜치 할 수 있습니다.

+0

동의합니다. 언제 어디에서나 돌아가서 원하는 곳으로 갈 수 있다는 점을 감안할 때, 가지를 만드는 것은 YAGNI의 명백한 사례처럼 보입니다. –

2

이 경우에는 밀어 넣기에 -f를 사용하는 것이 좋습니다. 단지 머리가 아닌 새로운 가지를 만듭니다. 원격 헤드 생성은 또 다른 문제입니다.