#language ko == 입문서 - 변경의 첫경험 == KoreanTutorialHistory까지 따라한 결과, KoreanTutorialClone에서 [[Clone|복제]]한 {{{my-hello}}} 저장소에 이르렀습니다. 여러가지 변경을 별도의 [[Repository|저장소]]에 분리하는 것은, [[Mercurial]]로 개발을 실천함에 있어 좋은 습관입니다. 이것은 관계 없는 코드가 섞이는 것을 막고, 이에 보다 각각의 작업을 개별적으로 테스트하는 일이 즐겁게 됩니다. 이 모델에 따라 시작해봅시다. 여기서의 간단한 목표는, "hello, world" 프로그램의 출력에 한 줄 더 추가하는 것입니다. 가장 먼저, 이 간단한 목표를 이루기 위한 프로젝트용으로 {{{my-hello}}}를 복제한 {{{my-hello-new-output}}}라고 불리는 새로운 저장소를 만듭니다. {{{ $ cd .. $ hg clone my-hello my-hello-new-output }}} 이 경우, clone 명령이 잘 실행되었으면 아무것도 표시되지 않습니다. '''주의:''' 새로운 [[Repository|저장소]]에 설명적인 이름을 붙이는 것에 주의하세요. 기본적으로는, [[Repository|저장소]]의 목적이 한눈에 들어오게 하는 이름을 붙입니다. [[Mercurial]]로는 [[Repository|저장소]]의 [[Clone|복제]]가 손쉽게 가능하기 때문에, 조금씩 다른 저장소들 금방 많이 쌓아두게 됩니다. 이들 저장소의 이름에 설명적인 이름이 붙이지 않는다면, 쉽게 식별하기 힘들 것입니다. 그러면, 새로운 저장소에 변경을 가해봅시다. [[WorkingDirectory|작업 디렉토리]] (이것은 모든 파일이 있는 디렉토리를 부르는 이름입니다)에 넣어, 좋아하는 에디터로 소스 코드를 변경해 봅시다. {{{ $ cd my-hello-new-output $ vi hello.c }}} {{{hello.c}}}의 내용은 원래 이렇습니다: {{{#!cplusplus numbers=off /* * hello.c * * Placed in the public domain by Bryan O'Sullivan * * This program is not covered by patents in the United States or other * countries. */ #include int main(int argc, char **argv) { printf("hello, world!\n"); return 0; } }}} {{{main}}}을 편집하여 출력하는 줄을 두 줄로 늘려 봅시다. {{{#!cplusplus numbers=off (...) int main(int argc, char **argv) { printf("hello, world!\n"); printf("sure am glad I'm using Mercurial!\n"); return 0; } }}} 다 마쳤으며, 에디터를 종료합니다. 이 편집으로, [[ChangeSet|변경집합]]을 만들 준비가 되었습니다. 그러나, 혹시 만약 작업을 중단하여, 어떤 변경이 [[ChangeSet|변경집합]]에 포함되는지를 잊어버렸다면 어떻게 할까요? 바로 그때, {{{status}}} 명령을 씁니다. {{{ $ hg status M hello.c }}} 간단한 출력입니다만, 접두사인 {{{M}}}이, {{{hello.c}}}가 변경(modified)되어 다음 [[ChangeSet|변경집합]]에 포함된다는 것을 가르쳐줍니다. {{{diff}}} 명령을 쓰면, 그 파일에 대한 변경을 실제로 조사하는 것이 가능합니다. {{{ $ hg diff diff -r 82e55d328c8c hello.c --- a/hello.c Fri Aug 26 01:21:28 2005 -0700 +++ b/hello.c Fri Sep 30 10:27:47 2005 +0800 @@ -12,5 +12,6 @@ int main(int argc, char **argv) { printf("hello, world!\n"); + printf("sure am glad I'm using Mercurial!\n"); return 0; } }}} 변경을 '''파기'''하여 원래 상태로 돌려놓고 싶은 경우는, {{{revert}}} 명령을 써서 파일을 변경하지 않은 상태로 돌려놓는 것이 가능합니다. 다만, 그것이 진정 하고 싶은 것인지 확인해주세요. {{{ $ hg revert }}} [[ChangeSet|변경집합]]을 작성하는 행위를, [[Commit|반영]]한다고 부릅니다. {{{commit}}} 명령을 써서 [[Commit|반영]]을 실행합니다. {{{ $ hg commit }}} 이것은 에디터를 열어, 암호와 같은 줄을 몇개인가 표시합니다. '''주의:''' 기본 에디터는 {{{vi}}}입니다. 이것은 {{{EDITOR}}}나 {{{HGEDITOR}}} 환경변수를 써서 변경하는 것이 가능합니다. 또한, 메니페스트의 해시는 어떻게 쳐서 파일에 보존하는가에 따라 다릅니다. {{{ (빈줄) HG: manifest hash 14595beb70bcfb74bf227437d70c38878421c944 HG: changed hello.c }}} 맨 처음 줄은 공백으로, 그 다음 행은 [[ChangeSet|변경집합]]에 포함될 파일을 가리킵니다. [[ChangeSet|변경집합]]을 [[Commit|반영]]하는 데에는, 이유를 써넣지 않으면 안됩니다. 이것은 통상 [[ChangeSet|변경집합]] 코멘트라 부릅니다. 이렇게 입력해 봅시다. {{{ Express great joy at existence of Mercurial HG: manifest hash 14595beb70bcfb74bf227437d70c38878421c944 HG: changed hello.c }}} 다음으로, 저장한 다음 에디터를 종료합니다. 여기까지 잘 되었다면, {{{commit}}} 명령은 종료하여 아무것도 표시되지 않습니다. 만약 텍스트를 저장하지 않고 에디터를 종료하면, {{{commit}}}는 조작을 중단하며 반영하기 전에 마음을 바꿀 수 있습니다. 그러면, 이 상태에서 {{{status}}} 명령을 어떤 상황을 알려줄까요? {{{ $ hg status }}} 아무것도 없습니다! 방금 가한 변경은 [[ChangeSet|변경집합]]에 [[Commit|반영]]되어 있으므로, 반영이 필요한 변경된 파일이 존재하지 않습니다. [[Tip]]은 이제까지 작업한 디렉토리의 내용과 일치하고 있습니다. 다음 작업을 위해, 갱신이력을 조사하는 것이 가능합니다. {{{ $ hg log changeset: 2:a58809af174d tag: tip user: mpm@selenic.com date: Fri Aug 26 01:26:28 2005 -0700 summary: Express great joy at existence of Mercurial (...) }}} 보입니다! [[Commit|반영]]한 [[ChangeSet|변경집합]]입니다. '''주의:''' 사용자 이름, 일시, ChangeSetID와 당연히 변하는 것이죠. KoreanTutorialClone에서 논의했듯이, 새로운 [[ChangeSet|변경집합]]은 이 저장소에만 존재합니다. 이것은 [[Mercurial]]의 얼개에 있어 매우 심대한 부분입니다. 변경을 공유하는 단계는, KoreanTutorialShareChange 에서 다룹니다. ---- CategoryKorean