⇤ ← Revision 1 as of 2007-09-14 11:18:35
Size: 1005
Comment:
|
Size: 3277
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
== 입문서 - 변경을 들여옵니다 == | == 입문서 - 변경을 병합합니다 == |
Line 3: | Line 3: |
KoreanTutorialExport에서는, 다른 사람과 변경을 공유하하는 방법을 배웠습니다. 다른 언어의 입문서에서는 여기서 ["Import"], 즉 들여오기가 아닌 병합을 다루지만, 이 입문서는 0.9 이상을 기준으로 하고 있어 들여오기를 바로 하면 됩니다. | KoreanTutorialExport에서는, 다른 사람과 변경을 공유하하는 방법을 배웠습니다. 여기에서는 ["Import"]가 아닌, 서로 다른 저장소들간의 병합을 다루어 봅시다. |
Line 5: | Line 5: |
먼저, {{{my-hello}}} 저장소를 한번 더 [:Clone:복제]합시다. | 먼저, 뭔가 병합할 것을 작성하지 않으면 안됩니다. {{{my-hello}}} 저장소를 한번 더 [:Clone:복제]합시다. |
Line 12: | Line 12: |
KoreanTutorialExport에서 만든 {{{patch.diff}}}를 {{{import}}} 명령으로 들여옵시다. | {{{hello.c}}}의 주석 부분에 설명을 덧붙여봅니다. |
Line 16: | Line 16: |
$ hg import patch.diff | $ vi hello.c |
Line 19: | Line 19: |
따로 {{{update}}} 해줄 필요 없어서, 저장소의 이력을 보면 아까 만든 변경이 반영되어 있음을 알 수 있습니다. | 두번째 줄을 아래와 같이 변경합시다. |
Line 21: | Line 21: |
이때 {{{patch.diff}}}는 물론 해당 디렉토리에 있어야 합니다. | {{{ * hello.c }}} |
Line 23: | Line 25: |
다음으로, KoreanTutorialConflict에서 충돌하는 변경이 만들어진 경우를 해결하는 방법을 알아봅시다. | 을 이렇게 바꿉니다. {{{ * hello.c - hello, world }}} 저장한 다음 편집기를 종료하여, 변경을 [:Commit:반영]합시다. 이번은 {{{commit}}} 명령에 {{{-m}}} 설정을 써서, 편집기를 띄우지 않게 하여 시간을 절약합니다.: {{{ $ hg commit -m 'Add description of hello.c' }}} 이 시점에서, {{{my-hello-new-output}}} [:Repository:저장소]의 {{{hello.c}}}에 변경이 한건 있어, {{{my-hello-desc}}} [:Repository:저장]의 {{{hello.c}}}에 다른 변경이 있습니다. 이들 2개의 분기한 개발 라인을 어떻게 해서 병합할까요? 한쪽에서부터 한쪽으로 pull하고 싶을 때에, 문제가 생기지는 않을까요? 문제 없이 잘 됩니다. {{{my-hello-desc}}}에 있는 채, {{{my-hello-new-output}}}로부터 변경을 [: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 head, 'hg merge' to merge) }}} 이는 KoreanTutorialShareChange의 {{{pull}}}의 출력과 완전히 똑같아 보이네요! 그래서 ["Update"]도 꼭 해야겠죠? {{{ $ hg update abort: update spans branches, use 'hg merge' or 'hg update -C' to lose changes }}} 아니, 뭔가 일이 터졌습니다. ["Mercurial"]은 [:Repository:저장소]에 가한 변경을 [:Merge:병합]할 필요가 있다고 알리고 있습니다. 수고가 좀 들 것 같죠? 실제로는 매우 간단합니다. 출력 마지막 줄의 표시를 따라 보세요: {{{ $ hg merge merging hello.c 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) }}} 해야 할 것은 이뿐입니다! ["Mercurial"]은 병합을 자동으로 처리할 수 있습니다. {{{hello.c}}}을 보면, {{{my-hello-new-output}}}로부터의 변경과 {{{my-hello-desc}}}로부터의 변경이 ''양쪽 모두'' 포함되어 있는 것을 발견할 수 있습니다. 다른 사람들이 작성한 변경과 더불어 일 할 때는, 최종적으로 대부분의 시간을 이런 식의 병합에 할애하게 됩니다. {{{hg merge}}}의 출력 마지막 줄에서 제시했듯이 저장소에 반영하는 것을 잊지 마세요. {{{ $ hg commit -m "Merged changes from my-hello-new-output" }}} 이 명령은 출력이 없습니다. 다음으로, KoreanTutorialConflict에서 경합하는 변경이 작성된 경우의 대처법을 배워봅시다. |
입문서 - 변경을 병합합니다
KoreanTutorialExport에서는, 다른 사람과 변경을 공유하하는 방법을 배웠습니다. 여기에서는 ["Import"]가 아닌, 서로 다른 저장소들간의 병합을 다루어 봅시다.
먼저, 뭔가 병합할 것을 작성하지 않으면 안됩니다. my-hello 저장소를 한번 더 [:Clone:복제]합시다.
$ cd .. $ hg clone my-hello my-hello-desc
hello.c의 주석 부분에 설명을 덧붙여봅니다.
$ cd my-hello-desc $ vi hello.c
두번째 줄을 아래와 같이 변경합시다.
* hello.c
을 이렇게 바꿉니다.
* hello.c - hello, world
저장한 다음 편집기를 종료하여, 변경을 [:Commit:반영]합시다. 이번은 commit 명령에 -m 설정을 써서, 편집기를 띄우지 않게 하여 시간을 절약합니다.:
$ hg commit -m 'Add description of hello.c'
이 시점에서, my-hello-new-output [:Repository:저장소]의 hello.c에 변경이 한건 있어, my-hello-desc [:Repository:저장]의 hello.c에 다른 변경이 있습니다. 이들 2개의 분기한 개발 라인을 어떻게 해서 병합할까요? 한쪽에서부터 한쪽으로 pull하고 싶을 때에, 문제가 생기지는 않을까요?
문제 없이 잘 됩니다. my-hello-desc에 있는 채, my-hello-new-output로부터 변경을 [: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 head, 'hg merge' to merge)
이는 KoreanTutorialShareChange의 pull의 출력과 완전히 똑같아 보이네요! 그래서 ["Update"]도 꼭 해야겠죠?
$ hg update abort: update spans branches, use 'hg merge' or 'hg update -C' to lose changes
아니, 뭔가 일이 터졌습니다. ["Mercurial"]은 [:Repository:저장소]에 가한 변경을 [:Merge:병합]할 필요가 있다고 알리고 있습니다. 수고가 좀 들 것 같죠? 실제로는 매우 간단합니다. 출력 마지막 줄의 표시를 따라 보세요:
$ hg merge merging hello.c 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit)
해야 할 것은 이뿐입니다! ["Mercurial"]은 병합을 자동으로 처리할 수 있습니다. hello.c을 보면, my-hello-new-output로부터의 변경과 my-hello-desc로부터의 변경이 양쪽 모두 포함되어 있는 것을 발견할 수 있습니다.
다른 사람들이 작성한 변경과 더불어 일 할 때는, 최종적으로 대부분의 시간을 이런 식의 병합에 할애하게 됩니다. hg merge의 출력 마지막 줄에서 제시했듯이 저장소에 반영하는 것을 잊지 마세요.
$ hg commit -m "Merged changes from my-hello-new-output"
이 명령은 출력이 없습니다.
다음으로, KoreanTutorialConflict에서 경합하는 변경이 작성된 경우의 대처법을 배워봅시다.