Hg Init: a Mercurial tutorial – Fixing Goofs

머큐리얼에서 가장 큰 이점 중 하나는 시험해 보거나 새 기능을 개발하는데 개인적인 저장소 복제 본을 사용할 수 있다는 것이다. 제대로 되지 않으면 몇 초 내로 되돌릴 수 있다.


Fixing Goofs

머큐리얼을 사용하면 자유롭게 시험할 수 있다. 일반적인 편집 과정 중에 편집기에 문제가 있어 뭔가 크게 잘못됐다고 생각해 보자.

이맥스(emacs)가 사랑스러워진다. 아무튼 모두 잃은 건 아니다. 회복하는 가장 일반적인 방법은 hg revert를 하면 된다.

이렇게 하면 정확히 마지막 커밋한 시점으로 파일을 되돌린다. 머큐리얼에서는 어느 것도 삭제하지 않으므로 피그 라틴(Pig Latin)[1] 게임 형식으로 만든 요리법을 없애는 대신 이름을 바꾼다.

만약 좀 더 나아가 정말로 커밋해 버렸다면 어떻게 할까?

hg rollback 명령이 목숨을 지켜주겠지만 변경 내용을 다른 곳에 넣지 않았을 때만 가능하다. 오직 커밋 하나만 되돌린다.

별도로 중요한 시험을 하려 한다고 생각해 보자. 사장이 고용한 새 디자이너인 짐(Jim)이 만든 명세서는 그야말로 엉터리다. 형광 녹색 글자에 미적인 이유로 줄이 맞는 건 없으며 사용성은 엉망이다. 한 주를 들여 모든 걸 되돌리고 싶지만 생각한 게 그 미친 그래픽 디자이너보다 낫다고 완전히 확신하지 못하므로 커밋하는 게 걱정이다. 짐은 기본적으로 일어나서 잘 때까지 계속해서 담배를 핀다. 그를 비난하고 싶지 않을뿐더러 다른 사람은 그의 디자인이 괜찮은 한 누구도 간섭할 일이 아니라고 생각한다. 하지만 한계는 있다. 그렇지 않나? 그의 디자인은 좋지도 않고 그는 공격적이다.

머큐리얼에서는 그저 전체 저장소에 대해 시험용으로 복제하면 된다.

이는 생각보다 효율적이다. recipesrecipes-experiment는 지금까지 이력을 모두 공유하며, 머큐리얼에서는 ‘하드 링크(hard link)’라는 파일 시스템 기술을 사용해 복사 본을 매우 빠르게 만들고 디스크에 추가 공간도 많이 쓰지 않는다.

이제 시험용 브랜치에 변경을 할 수 있다.

다음은 나의 대단히 멋진 과카몰리 시험 내용이다.

지금은 시험용 저장소이므로 자유롭게 커밋할 수 있다.

자유롭게 변경하고 작업할 수 있으며 원하면 언제든 커밋할 수 있다. 이를 통해 심지어 미쳐 보이는 시험을 하더라도 아무도 괴롭히지 않고 소스 제어에 대한 모든 힘을 가진다.

시험이 잘못됐다고 생각하면 그저 시험 디렉터리 전체를 삭제하면 된다. 흔적도 없이 문제는 해결 된다.

하지만 잘 동작하면 새 변경 내용을 넣기만 하면 된다.

변경 내용은 어디로 갔을까?

‘default’는 저장소를 지정하지 않았을 때 hg push로 변경 내용을 넣는 저장소 경로이다. 일반적으로 그 값은 복제한 저장소이다. 이 예에서는 지역 디렉터리이지만 URL일 수도 있다.

변경 내용을 저장소에 방금 넣었지만

아직은 그 버전으로 작업하는 게 아니라는 걸 잊지 말자.

어떤가? ‘Queso’는 체인지셋 5에 있다. 하지만 나의 주 저장소는 체인지셋 4였고 누군가가 저장소에 새 변경 내용을 넣었으나 이게 내 작업 디렉터리에 나타나는 건 아니다. 그러므로 난 여전히 체인지셋 4로 작업하고 있다.

체인지셋 5에 있는 내용을 보고 싶으면 hg update 명령을 사용하면 된다.

무슨 일이 벌어졌을까? 내가 작업한 내용 위에 새 변경 내용이 들어왔다. pushpull은 한 저장소에서 다른 저장소로 변경 내용을 보낼 뿐 당시 내가 작업하던 파일에 영향을 주진 않는다.

지금 저장소 상태는 다음과 같다.

머큐리얼은 저장소 사이 변경 내용 이동이 유연하다. 시험용 저장소에서 중앙 저장소로 직접 넣을 수도 있다.

시험용 저장소에서 중앙 저장소로 체인지셋 5를 직접 넣었다. 이제 내 저장소로 가 보면 넣을 게 없다!

어딘가에서 넣은 특정 체인지셋이 중앙 저장소에 이미 있다는 걸 머큐리얼에서 알기 때문에 이는 정말 유용하다. 그렇지 않으면 같은 내용을 다시 적용할 수도 있어 매우 혼란스러울 거다.

디자이너 짐에게 입사 허가를 하자 그는 즉시 일을 시작하겠다고 했다. 하지만 두 달 동안 나타나지 않았다. 사람들은 그와 입사 허가에 대해 거의 잊었기에 그가 다소 햇볕에 탄 모습으로 사무실에 나타나 처음으로 일을 시작했을 때 솔직히 그가 누군지, 무슨 일이 있었는지 아무도 전혀 몰랐다. 꽤 우스웠다. 그는 평범해 보였다. 결국에는 모두가 짐작했지만 그는 낯설었기에 무슨 일이 있었는지 물어볼 만큼 용기 있는 사람은 없었다. 마찬가지로 얼굴에 난 타박상과 긁힌 상처에 대해서도 묻지 않았다. 뭐든 간에. 우리는 그 사람이 싫었다.

때때로 몇 달 전에 한 일에 실수가 있다는 걸 발견하기도 한다.

감자 칩? 이럴수가?!

머큐리얼에서는 이전 체인지셋을 되돌릴(backout) 수 있다. 체인지셋을 살펴보고 되돌렸을 때를 계산한 후 현재 작업 디렉터리에 적용한다. 그럼 리비전 2를 되돌려 보자.

이럴 수가, 무슨 일이 일어났나?

지금까지 시간이 많이 지났다. 감자 칩은 요리법에서 이미 없어졌지만, 이 변경 내용으로 병합하는 것을 불가능하게 하는 모든 종류의 유령 같은 재료가 나타날 수 있다. 그런 경우 병합 충돌이 생길 것이고 어떻게든 해결해야 한다. 다음 튜토리얼에서 이에 대해 얘기하겠다.

확인하기

다음은 이 튜토리얼을 읽은 후 알아야 하는 것이다.

  1. 체크인 하기 전 또는 한 후 잘못 변경한 내용을 되돌린다.
  2. 시험용 저장소를 지역적으로 복제한다.
  3. 저장소 사이에서 변경 내용을 넣는다.
  4. 오랫동안 저장소에 있던 오래된 문제를 되돌린다.

[1] Boy를 oybay라 하는 것처럼 맨 앞 자음을 어미로 옮기고 그 뒤에 ay를 붙이는 말장난

You may also like...