#language ko == 입문서 - 충돌하는 변경을 병합합니다 == 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을 아래와 같이 변경합니다: {{{#!cplusplus numbers=off 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으로 넘어가 마무리 지읍시다. ---- CategoryKorean