본문 바로가기

공부/Mercurial

[Mercurial 사용법] Push, Pull

1. Push, Pull 개요


  머큐리얼의 Push, Pull은 타 저장소로 변경 사항(changeset)을 전송하는 과정을 의미한다. Push와 Pull을 설명하기 이전에, 머큐리얼의 Revision과 Changeset의 개념에 대해 간단히 정리할 필요가 있다. 

  • Revision은 특정 시점에 저장소의 상태를 표시하는 번호이다. 이 번호는 순차적으로 올라가게 된다. 
  • changeset은 저장소의 변경 사항을 저장하는 단위이며, 하나의 changeset을 commit하거나 다른 저장소로부터 pull/update하게 되면, changeset을 받아오게 되며, Revision 번호는 하나 증가한다.
  • Revision 번호를 changeset과 동일한 것으로 보는 경향이 있는데 이는 잘못된 것이다. 이는 머큐리얼이 각자의 저장소를 가지고 각자의 변경 이력을 관리할 수 있는 저장소를 제공하는 특성(즉, DVCS의 특성)에 기인한다. 
  즉, Push나 Pull을 통해 changeset을 교환하는 순서에 따라 머큐리얼의 changeset 번호는 순차적이지 않을 수 있으므로, Revert 등의 기능을 통해 특정 Revision으로 돌아갈 때 유의해야 한다. 또한, 이러한 단점을 보완하기 위해, 특정 Revision을 Tagging 하는 기능이 있고, 이를 자주 작성하는 것을 권장한다. 
  더 자세한 설명은 Joel의 Mercurial 소개 사이트(http://hginit.com/)를 살펴보기 바란다. 


  앞에서 언급했듯이, 머큐리얼의 Push, Pull은 "변경사항(changeset)을 전송" 하는 형태이므로, 상당히 유연하게 동작한다. 예를 들면 

  • 중앙 저장소와 변경 사항을 Push/Pull 할 수 있다. 
  • 특정 사용자에게만 변경 사항을 Push/Pull하여 적용하도록 할 수 있다. 예를 들자면, QA에게 변경한 코드를 전송한 후, 테스트가 끝나면 중앙 저장소에 Push 하는 형태로 활용할 수 있다. 
  • 자기 자신이 Clone 한 저장소에 변경사항을 Push/Pull 할 수 있다. 


2. 외부 저장소로 변경사항 Push

  변경사항을 commit했다면, Revision 번호가 변경되었을 것이고, 이를 외부 저장소에 Push해야 한다. MercurialEclipse에서 Push 과정은 다음과 같은 과정을 통해 수행한다.
  • 먼저 Push를 받을 원격 저장소의 Mercurial Web Server가 동작하고 있어야 하며, 해당 웹 서비스의 주소를 알고 있어야 한다. 
  • 변경사항이 있는 프로젝트를 우클릭하고, Team > Push를 수행하면 다음과 같은 창이 표시된다. URL을 입력한 후, Next를 눌러 Push할 changeset을 확인한 후, Finish를 눌러 Push를 완료한다.


  • Push한 changeset을 원격 저장소의 웹서비스를 통해 확인한다. 



3. 외부 저장소로부터 Pull


  Pull은 Push와는 대비되는 개념으로, 외부 저장소로부터 현재 변경된 changeset을 받아오는 과정을 의미한다. 

  MercurialEclipse에서 Pull은 다음과 같은 과정을 통해 수행된다. 

  • 먼저 Pull를 받을 원격 저장소의 Mercurial Web Server가 동작하고 있어야 하며, 해당 웹 서비스의 주소를 알고 있어야 한다. 
  • 변경사항이 있는 프로젝트를 우클릭하고, Team > Pull를 수행하면 다음과 같은 창이 표시된다. URL을 입력한 후, Next를 눌러 Pull할 changeset을 확인한 후, Finish를 눌러 Push를 완료한다.



  • ※ 머큐리얼은 일반적으로 Pull을 수행하면, Update를 통해 수신받은 changeset을 현재 프로젝트에 반영하는 과정이 한 단계 포함하나, MercurialEclipse의 실행 옵션 중 Pull Option에 "update after pull"이 체크되어 있어, Pull을 수행한 직후에 update를 수행해주도록 되어있다. 다른 머큐리얼 환경 (특히 command로 Mercurial 수행시) 유의하도록 하자.