특정 리비전으로 업데이트 하거나, 브랜치를 전환하거나, 원격 저장소에서 변경내역을 받아와 merge를 하고 싶거나 할 경우,

working directory에 변경내역이 있으면 안됨.

방법은 1. 커밋을 하거나, 2. --clean 옵션을 이용해서 이전 변경내역을 다 날리는 건데 둘 다 부담스러움.


이럴 때 현재 변경내역을 일단 어딘가 짱박아두고 원하는 작업을 수행한 다음 다시 복구할 수 있도록 해주는 것이 shelve extension임.



[준비물]

Mercurial의 버전이 2.8 이하일 경우 shelve extension을 따로 설치해줘야 함.

아래 링크 참조. (사실 여기 사용법도 다 있음..)

http://mercurial.selenic.com/wiki/ThirdPartyShelveExtension


위 링크로 가면 버전별로 적합한 hgshelve.py 파일의 리비전 번호가 링크로 걸려 있는데,

해당 bitbucket 저장소로 가서 좌측의 Source 메뉴를 선택하고,

우측 페이지의 좌상단 'default'라고 되어 있는 탭을 클릭한 후 Tags 탭을 선택하고,

자신의 Mercurial 버전에 맞는 tag를 선택함.

그리고 hgshelve.py 파일을 클릭하고 해당 내용을 복사한 다음 로컬에 새 파일을 하나 생성하여 복사한 내용을 붙여넣기 한 후 해당 파일을 hgshelve.py 라고 한 후 저장.

그리고 나중에 설정하기 편하게 C:\Program Files\TortoiseHg 폴더에 집어넣자.



[설정]

.hg/hgrc 파일이나 C:\Users\사용자이름\mercurial.ini 파일을 열어 아래 내용 추가

[extensions]

hgshelve = hgshelve.py




[사용법]



// 변경내역 확인
C:\rep> hg status
M mod1.txt

// shelve
// 변경 파일 하나하나에 대한 설정이 가능한데 a 라고 입력하면 그냥 전체 다 shelve 시킴
C:\rep> hg shelve 
diff --git a/mod1.txt b/mod1.txt
12 hunks, 193 lines changed
shelve changes to 'mod1.txt'? [Ynsfdaq?]

// 하려했던 작업을 마저 하고....

// unshelve
C:\rep> hg unshelve
unshelve completed

// 확인
C:\rep> hg status
M mod1.txt





// 그냥 전부 shelve 하기
C:\rep> hg shelve --all

// shelve된 리스트 보기
// 아무 이름도 지정하지 않고 shelve 했으므로 default 라고 하나만 나옴
C:\rep> hg shelve --list
default

// 이름을 지정하고 shelve 하기
C:\rep> hg shelve --all --name MY_SHELVE
// 확인
C:\rep> hg shelve --list
MY_SHELVE

// 이름을 지정하고 unshelve 하기
C:\rep> hg unshelve --name MY_SHELVE



Posted by bloodguy
,