Introduction To Mercurial Phases (Part II)

원문: http://www.logilab.org/blogentry/88219

이 글은 머큐리얼(Mercurial) 2.1에 구현한 새 기능인 상태(phases)에 관한 일련의 글 중 두 번째입니다. 첫 번째 글에서는 상태가 머큐리얼 사용자에게 어떻게 도움이 되는지를 얘기했으며 이 글에서는 어떻게 제어하는지를 설명합니다.

자동으로 이동하는 상태 제어하기

때로는 마무리하지 못한 작업 내용을 공유해야 해서 체인지셋을 초안(draft) 상태로 원격 저장소에 보내거나 그 저장소에서 받아오는 게 적절할 수도 있습니다. 몇 가지 예를 들어 보면 다음과 같은 경우입니다.

  • 지속적인 통합을 위해 원격 저장소로 보낼 때
  • 리뷰를 하기 위해 체인지셋을 원격 저장소 보낼 때
  • 사용자가 여러 머신에서 작업할 때
  • 브랜치를 복제할 때

저장소 설정 파일에서 배포 동작을 비활성화할 수 있습니다.

저장소를 배포할 수 없게 설정하면 상태 변경 없이 체인지셋을 다른 저장소로 보낼 수 있습니다. 초안인 체인지셋은 초안으로, 공개인 체인지셋은 공개 상태를 그대로 유지한 채 다른 저장소로 들어갑니다.

그리고 그 원격 저장소에서 가져오면 그 저장소에 있는 상태를 그대로 유지합니다.

상태 정보는 pullpush 동작을 할 때 교환합니다. 어떤 체인지셋이 양쪽 저장소에 모두 있으면서 상태가 다르다면 가장 낮은 상태로 통일합니다. 예를 들어 어떤 체인지셋이 지역 저장소에서는 초안이지만 원격 저장소에서는 공개라면 공개로 설정합니다.

참고: pull은 읽기 전용 동작이며 원격 저장소에 있는 상태를 바꾸지 않습니다.

새로 커밋하는 체인지셋의 상태를 제어할 수도 있습니다. 새 체인지셋 중 명시적으로 승인한 것만 다른 저장소로 보내려면 설정을 다음처럼 바꿉니다.

이제 체인지셋을 다른 저장소로 보내려면 상태 이동을 직접 처리해야 합니다. 자세한 내용은 다음 절에서 설명합니다.

참고: 지금까지 다룬 내용과 함께 ‘새 커밋을 비공개로 만드는 가장 실용적인 방법’은 다음처럼 하는 겁니다.

상태 이동 직접 처리하기

상태 이동은 대부분 인식하지 못하는 사이에 자동으로 처리됩니다. 하지만 여전히 hg phase 명령으로 직접 상태 이동을 처리할 수도 있습니다.

체인지셋은 일반적인 동작을 하는 동안 더 낮은 상태로만 이동합니다. 기본적으로 상태 명령은 이 규칙을 따릅니다.

하지만 --force 스위치를 사용해 이런 동작을 무시할 수도 있습니다.

경고: 상태는 사용자가 hg phase --force 를 사용하지 않아도 되도록 설계했습니다. 만약 --force를 사용해야 하는 일반적인 이유가 있다면 뭔가 잘못하고 있는 겁니다. 자신의 요구에 적합하게 상태 이동이 자동으로 처리되도록 설정하는 방법을 보려면 이전 절 내용을 읽어 보세요.

이력 그래프에서 상태가 일관된 리비전 집합을 정의하고 있는 점에 주목합니다. 즉 (변경할 수 없는) 공개 체인지셋의 조상은 모두 변경 불가 상태여야 한다는 것을 뜻합니다. 또한 (교환할 수 없는) 비공개 체인지셋의 후손은 모두 비공개가 됩니다. 이는 체인지셋의 상태를 바꾸는 것은 결국 다른 체인지셋의 상태를 바꿀 수도 있다는 것을 뜻합니다.

다음이자 마지막 글에서는 이전 버전 머큐리얼과 상태를 지원하는 새 버전을 함께 쓰는 법에 대해 설명합니다.

Notes:
1. 자신의 hgrc 파일에서 설정해도 됩니다.
2. 상태 순서는 공개 < 초안 < 비공개 입니다.
자신의 hgrc 파일에서 설정해도 됩니다.
상태 순서는 공개 < 초안 < 비공개 입니다.

You may also like...