⇤ ← Revision 1 as of 2007-09-16 08:48:36
Size: 4205
Comment:
|
Size: 4227
Comment: cat
|
Deletions are marked like this. | Additions are marked like this. |
Line 79: | Line 79: |
---- CategoryKorean |
입문서 - 충돌하는 변경을 병합합니다
KoreanTutorialMerge에서는, 간단한 [:Import:들여오기]를 다루는 법을 배웠습니다.
["Mercurial"]은 더욱 복잡한 [:Merge:병합]도 다룹니다. 2명이 어떤 파일의 같은 줄을 편집하는 일이 그리 드문 것은 아니며, 대처법을 강구해야 합니다. 이런 문제를 충돌이라고 부릅니다; 충돌에 대해서 무엇을 해야하는가를 해명하는 것을, 해결이라고 부릅니다.
먼저 인위적으로 충돌하는 상황을 연출해봅시다. 앞서 했듯이, my-hello을 [:Clone:복제]하는 일부터 시작해봅시다.
$ cd .. $ hg clone my-hello my-hello-not-cvs
이번에는 hello.c의 출력에 새로운 행을 추가해봅시다:
$ cd my-hello-not-cvs $ vi hello.c
main을 아래와 같이 변경합니다:
int main(int argc, char **argv)
{
printf("hello, world!\n");
printf("sure am glad I'm not using CVS!\n");
return 0;
}
그래서 이 변경을 [:Commit:반영]합니다.
$ hg commit -m 'Give thanks for dodging bullet'
KoreanTutorialFirstChange에서는, my-hello-new-output 에도 두번째 줄의 출력을 더한 [:ChangeSet:변경집합]을 작성했던 것을 기억해주세요. 여기서 그 변경을 [:Pull:당겨오기]로 하면, 무슨 일이 벌어질까요?
$ hg pull ../my-hello-new-output pulling from ../my-hello-new-output searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge)
여기까지는 좋습니다. ["Update"]해봅시다.
$ hg update abort: update spans branches, use 'hg merge' or 'hg update -C' to lose changes
hg merge를 실행할 필요가 있습니다. 그러나, 여기에 변화가 있습니다. ["Mercurial"]은 자동적으로 [:Merge:병합]하는 것이 가능하지 않습니다, 라고 하는 것은 각 [:ChangeSet:변경집합]에 따라, 같은 소스 파일의 같은 줄이 다른 식으로 변경되어 있기 때문입니다 (한편으로는 [:Commit:반영]한 것으로, 또 한편은 [:Pull:당겨오기]한 것입니다. 그 대신에, ["Mercurial"]은 수동 병합을 도와주는 프로그램을 시작하게 됩니다.)
$ hg merge
이 시점에서 어떤 일이 벌어지는가는, 컴퓨터에 설치된 프로그램에 의존합니다. 만약 준비성이나 운이 좋다면, [:MergeProgram:병합프로그램]을 설치해두었기에, [:MergeProgram:병합프로그램]이 뜹니다. 여기서, 2개의 변경 사이에 무언가 충돌하고 있는지를 확인하여, 그것을 어떻게 해야 해결하는지를 결정하는 것이 가능합니다.
["Mercurial"]은 파일당 3-way 병합을 사용합니다. 이것은 병합처리에 3개의 입력파일이 있는 것을 의미하며, 다음과 같습니다.
- 로컬 파일 (현재의 저장소에서 옴)
- 다른 파일(병합될 저장소에서 옴)
- 기본파일 (가지가 갈라지기 전의 최신 파일)
3-way에 대해 더 자세한 정보는, [http://revctrl.org/ Revctrl wiki]에 있는 [http://revctrl.org/ThreeWayMerge ThreeWayMerge]를 보시기 바랍니다.
만일 [:MergeProgram:병합프로그램]을 설치하지 않고 있다면, 텍스트 편집기가 떠서, [:Merge:병합]할 필요가 있는 파일을 엽니다. 이것을 손수 하는 것은 매우 잘못할 가능성이 높고 지겹습니다. 편집기를 종료한 다음 hg rollback 명령을 써서 ["Pull"]의 결과를 취소한 다음, [:MergeProgram:병합프로그램]을 설치하여, 한번 더 시도해보는 것이 가장 좋습니다.
주의: ["Mercurial"]은 어떤 프로그램을 실행할 필요가 있는지를 알아보기 위해 HGMERGE 환경변수와 설정 파일을 조사합니다. 만약 아무것도 설정되어 있지 않다면, hgmerge 스크립트를 실행합니다.
이제 KoreanTutorialConclusion으로 넘어가 마무리 지읍시다.