1. Mercurial 설치 개요
머큐리얼은 대표적인 DVCS(Distributed Version Control System) 중 하나다. 머큐리얼에 대한 설명은 내 블로그에 이미 정리된 포스트(http://silencer.tistory.com/57)가 있으므로, 생략한다.
현재까지 내가 머큐리얼을 사용하면서 직접적으로 느낀 장점과 단점은 아래와 같다.
- 장점
- 빠른 커밋
- 로컬 저장소에 이력을 저장하므로, 커밋이 빠르다. 로컬 저장소에 커밋이 빠르다는 점은, 그만큼 '커밋을 하는데 부담이 적다'라는 장점을 가질 수 있고, 이는 사용자가 변경사항에 대해 더 자주 커밋을 할 수 있도록 해준다.
- 단, 이 커밋은 중앙 저장소로의 커밋과는 다르다. 머큐리얼은 중앙 저장소로의 동기화를 위해 pull, push 라는 명령을 지원한다. (pull = svn의 update, push = svn의 commit과 같은 개념을 보면 됨)
- 충돌이 비교적 적음
- SVN에 비해 충돌이 상대적으로 적음
- 머큐리얼은 3-ways merge 라는 방식을 통해 소스의 변경을 비교하는 방식을 채용하고 있음. 3-ways merge에 대한 자세한 설명은 다음 주소를 참고 (http://blog.naver.com/PostView.nhn?blogId=manaslu85&logNo=122326912)
- 설치/사용의 간편성
- 서버/클라이언트 등을 설정해야 하는 SVN과 달리 머큐리얼은 자체가 서버/클라이언트 역할을 모두 할 수 있으므로 설치가 간편하다.
- 또한, TortoiesHg 라는 강력한 UI 툴을 지원하므로, 중앙저장소, 개발 환경에 관계 없이 머큐리얼과 TortoiesHg 패키지만 설치하면 되고, (물론, 이클립스 사용 시에는 머큐리얼 플러그인을 사용하는 게 좋다.) ToroiesHg를 통해 모든 명령어를 명령창 없이 GUI만으로 사용할 수 있다.
- 분기(branch)와 병합(merge)이 유연함
- branch 명령을 지원하긴 하지만, 단순히 clone이라는 명령을 통해 프로젝트를 복사하는 것만으로 분기가 가능
- clone 명령을 통해 분기한 프로젝트의 변경 사항을 기존 저장소로 push 함으로써 변경 사항을 merge 할 수 있음
- 단점
- 중앙 저장소 동기화 빈도가 낮아짐
- 시스템의 문제라기보단, 프로그램 사용상의 문제에 가깝다고 봐야 할 것 같음
- 특히, SVN에 익숙한 사용자의 경우, SVN의 commit과 머큐리얼의 commit을 동일하게 여기는 경향이 생기는 듯함
- 하지만, 중앙 저장소와 동기화하지 않는 DVCS는, 개발 툴이 지원하는 History 기능이나 마찬가지라는 생각이 듬
- 또한, 동기화 빈도가 낮아질수록 충돌이 발생할 가능성은 점점 높아짐
- 정기적인 push, pull 주기를 정하는 등의 별도 정책을 정하여, 중앙 저장소와 정기적으로 동기화를 수행할 수 있도록 하는 것이 좋을 것 같음
- Workbench에서 File > Settings를 선택하면 TortoiesHg Settings 창이 표시된다.
- Commit
- Username을 설정한다. Username은 이 PC에서 commit을 수행할 시에 사용자 이름을 나타낸다.
- Web Server
- 웹서버 실행 시 홈페이지에 표시할 이름, 설명, 포트 등을 설정해준다. 또한, Allow Push, Deny Push 등을 설정해주어야 하는데, 이는 중앙 서버에 Push 할 수 있는 사용자 이름을 의미한다.
- File > New Repository를 선택하면 위와 같은 창이 표시된다.
- 알맞은 저장소 디렉토리를 설정한다. (주: 웹서버 상의 주소가 매핑될 때, Space나 한글을 구분하지 못하는 경우가 많으므로, Repository 주소는 항상 공백이나 한글이 없도록 하는 것을 추천한다.)
- Create 버튼을 눌러 Repository가 생성된 것을 확인한다.
5. 웹서버 실행
머큐리얼의 Web Server를 띄운다는 의미는 단순히 이력을 확인할 수 있는 웹 페이지를 올리는 작업을 말하는 것은 아니다. 머큐리얼은 push를 받기 위해서는 Web Server가 동작해야 하며, 해당 포트를 통해 push 정보를 수신받게 된다.
- 메뉴의 Repository > Start Web Server를 실행한다. 위와 같은 창이 표시된다.
- 포트를 설정하고, Start 버튼을 누른다.
[paths] 하위에 [프로젝트이름]=[Repository경로] 형식으로 지정하고, 이를 파일로 저장하고 매 실행시 이 파일을 로드하면, 다수의 Web페이지를 띄울 수 있다.
※ 이 설정 파일의 물리 경로에 공란이 포함되어 (e.g. "Program Files") 인식이 되지 않는 경우를 겪은 적이 있다. 반드시 경로에 공란이 포함되지 않도록 주의할 것
6. 웹 서버 실행 자동화
위와 같이 설정을 하더라도, 웹서버는 사용자가 WebServer를 실행시켜주기까지 동작하지 않는다. 그렇다고, 매 번 Web Server를 서버 부팅시마다 실행해주는 것은 너무 비효율적인 일이다. 간단한 방법을 통해 웹서버가 부팅시마다 켜질 수 있도록 해보자.
머큐리얼은 기본적으로 TUI 형식의 명령어를 지원한다. 머큐리얼과 관련된 명령을 수행하기 위해서는 hg(주: Mercurial=수은 -> 수은의 원소기호 hg)를 타이핑하고, 뒤에 수행할 작업을 인자로 전달해야 한다. 머큐리얼이 지원하는 작업 종류는 다음의 명령을 통해 확인할 수 있다.
> hg help
이 명령어 중, hg serve 라는 명령이 존재한다. serve 명령은 웹 서버를 실행해주는 명령이며, 이 때 필요한 옵션은 아래와 같은 명령으로 확인할 수 있다.
이 중, -d, -p, --web-conf 옵션 등에 주목할 필요가 있다. 대부분은 위에서 Web Server 관련 머큐리얼 설정에서 알아본 내용이므로, 별도의 부연 설명은 생락한다. 최종적으로 실행할 명령어는 아래와 같다.
> hg serve -d -p [웹 포트번호] --web-conf [웹 설정 파일 경로]
이 명령을 수행하면, 웹서버가 백그라운드 프로세스로 수행되게 된다. 프로세스의 이름은 hg.exe이므로, 종료를 원할 땐 참고하기 바란다.
이 명령을 배치파일로 만들어 시작 프로그램에 등록하거나, 배치 파일을 서비스 형태로 등록하면, 매 실행시마다 WebServer를 실행할 필요 없이 자동으로 머큐리얼 웹서비스가 실행된다. 아마도 시작 프로그램으로 실행시에는 사용자 로그인이 필요하거나, 별도의 조작이 필요하므로, 가장 이상적인 건 배치파일을 서비스로 등록하는 방법일 것이다. 배치 파일을 서비스로 등록하는 방법은 다음 포스팅과 외부 링크를 참고한다.
(다행히도, Windows 7에서도 호환성 문제 없이 잘 동작한다. 설치 과정에서 호환성 관련 경고를 한번 무시하는 것 빼고는 아래 절차와 동일하다.)
http://silencer.tistory.com/30
'공부 > Mercurial' 카테고리의 다른 글
[Mercurial 사용법] Clone (0) | 2013.04.14 |
---|---|
[Mercurial 사용법] Push, Pull (0) | 2013.04.14 |
[Mercurial 사용법] Mercurial로 프로젝트 공유하기 (0) | 2013.04.14 |
이클립스에 MercurialEclipse 플러그인 설치 (0) | 2013.04.13 |
Mercurial SCM (Source Control Management) (0) | 2011.04.04 |