문제

저는 한동안 Mercurial과 협력해 왔습니다.일부 타사 소프트웨어를 (비공개) 변경할 때 과거에는 항상 이러한 변경 사항에 대해 별도의 명명된 분기를 만들었습니다.업스트림 코드가 업데이트되면 이를 이름이 지정된 브랜치에 병합하기만 하면 됩니다.

오늘은 MQ(Mercurial Queues - 장)에 대해 읽었습니다. 12 그리고 13).MQ의 개념을 이해했다고 생각합니다. 따라서 제 질문은 다음과 같습니다.

내 시나리오의 경우 Mercurial의 (명명된) 분기에 비해 MQ의 이점이 있습니까?

도움이 되었습니까?

해결책

명명된 분기에 비해 MQ의 주요 장점은 다음과 같습니다.

  • 패치를 수정할 수 있습니다.이를 통해 기록을 편집할 수 있으므로 업스트림 코드 위에 깨끗하고 논리적인 일련의 패치를 유지할 수 있습니다.패치에서 실수를 발견하면 새로운 커밋을 하는 대신 패치를 새로 고칩니다.

  • 패치의 변경 사항은 업스트림 변경 사항과 완전히 분리됩니다.두 개의 브랜치를 병합하면 두 가지 개발 흐름이 혼합됩니다.이로 인해 업스트림 분기에서 들어오는 변경 사항을 확인하지 않고는 변경 사항을 확인하기가 어렵습니다.

  • 패치 이름은 일시적입니다.때를 hg qfinish 패치가 적용된 경우 커밋에 패치 이름이 남아 있지 않습니다.따라서 MQ를 전혀 알 수 없으므로 업스트림 저장소와 먼저 조정하지 않고도 MQ를 사용할 수 있습니다.

  • 병합을 방지합니다.업스트림의 최신 코드와 병합하는 대신 리베이스 적용된 패치.이것은 당신에게 더 간단한 역사를 제공합니다.당신이 모든 패치를 만든 것처럼 가장했기 때문에 기록은 분명히 가짜입니다. ~ 후에 업스트림에서 코드 보기 — 실제로는 업스트림 이상과 병렬로 코드를 만들었을 때 움직이는 업스트림 끝에 패치를 추가하세요.

  • 변경 세트에 영구 분기 이름이 없습니다.사람들은 가끔 명명된 분기를 일회용으로 처리 명명된 가지가 역사에 고정되어 있다는 사실을 알게 되면 화를 냅니다.(실제로 지점 이름을 다음과 같이 설정할 수 있습니다. hg branch 패치를 적용하기 전에 이 점이 그렇게 나쁘지는 않습니다.)

MQ의 단점은 다음과 같습니다.

  • 학습할 수 있는 추가 도구입니다.강력하지만 발에 총을 쏠 수 있는 기회도 더 많이 제공합니다.달리기 hg qdelete 정말 그럴거야 삭제 패치를 적용하여 데이터를 버릴 수 있습니다.(나는 이것이 괜찮다고 생각하지만, 우리 메일링 리스트에 와서 이것에 대해 불평하는 Git 사용자가 있었습니다.)

  • 다른 사람과 협력하는 것이 훨씬 더 어려워집니다.너 ~할 수 있다 회전하다 .hg/patches 저장소에 넣고 저장소 사이에 패치를 푸시/풀하지만 단일 개발자 이상이면 그렇게 하기가 어렵습니다.문제는 두 명 이상의 사람이 동일한 패치를 새로 고치면 결국 패치를 병합하게 된다는 것입니다.

  • 변경 세트에 영구 분기 이름이 없습니다.명명된 분기를 올바르게 사용하고 안정적인 장기 분기 이름을 사용하는 경우 MQ를 사용할 때 이를 놓칠 수 있습니다.

다른 팁

좋은 질문.때에 따라 다르지.개인적으로 나는 Mercurial Branching System을 싫어하며, 내가 할 수있는 경우 (분기 대신 북마크를 사용) 할 수있을 때 그것을 피하려고 노력합니다.

MQ는 훌륭한 권력과 위대한 함정을 가진 훌륭한 도구입니다. pbranch 를 사용하는 것을 고려할 수도 있습니다.

MQ는 프로젝트에 X를 추가하고 업스트림 코드로 업데이트 된 패치를 유지하는 것과 같은 프로젝트에 대한 패치 세트를 생성하고 유지 관리 해야하는 경우 훌륭한 도구입니다.

북마크 (또는 원한다면 분기)는 업스트림 코드로 병합되어야하는 짧은 개발 작업에 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top