· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
WinCVS

WinCVS의 간략한 사용방법

  • 일단 그림만 올리기로 합니다. 시간여유가 생길때마다 업데이트를 할 예정입니다.
  • 현재는 간략한 사용방법이라 칭하였지만, 많은 분들의 도움이 있다면 상세한 사용법이 될수도 있으리라 생각됩니다.
  • 문서 작성이 완료되면 TortoiseCVS에 대한 문서를 작성할까 생각하고 있습니다. -- 쫑아
  • 글을 작성은 했으나, 작성된 글을 받아놓지 않아서 다시 쓸까 합니다. 이 글 보시고, 혹시 실수로 받아놓은 분이 있다면, 주저하지 마시고 올려주시면 고맙겠습니다.


MS Windows 환경에서 가장 많이 알려진 CVS client를 꼽으라면 WinCVS가 아닐까 합니다. 이에 대한 간략한 사용방법에 대해서 기술하도록 하겠습니다.



1. 어디서 다운로드 하는가요?

CVS/FAQ 페이지에도 기술되어 있듯이 [http]http://cvsgui.sourceforge.net 에서 다운로드 받으실 수 있습니다. 다운로드 페이지를 찾기가 어려우시다고요? 2003년 10월 30일 현재 [http]http://cvsgui.sourceforge.net/download.html#WINCVS 에서 다운로드 가능합니다. 여기에서는 1.3 BETA 2를 기준으로 작성되었으나 안정된 버전을 원하신다면 1.2를 사용하셔도 무방합니다. 설치는 일반적인 윈도우즈 프로그램과 대동소이하므로 잘 하시리라 믿습니다. :)

2. 처음 실행화면

wincvs_run.png
[PNG image (26.12 KB)]
WinCVS만 실행 시킨 화면입니다. CVS는 Client/Server 구조로 이루어져 있으므로 우리는 CVS를 사용하기 위해서는 Server에 대한 설정을 해 주어야 합니다. 서버에 우리가 사용할 소스코드라던가 모든 파일들이 존재하게 됩니다. 이 파일들이 존재하는 위치를 CVSROOT라고 부릅니다. CVSROOT는 접속방법부터 어떤 사용자가 어느 호스트의 어느 디렉토리를 사용할것인가를 모두 기술하게 됩니다. 아래는 예제로 WinCVS를 설정한 장면입니다. 설정을 위해서는 Admin -> Preferences 로 들어가시면 됩니다.

wincvs_Preferences.png
[PNG image (14.18 KB)]
위의 예제는 pserver이라는 방법으로 사용자 인증을 거치며, Server의 /var/lib/cvs에 CVS가 관리하는 파일들이 있음을 의미합니다. Server의 주소는 confide.jemiro.net이며, 사용자의 이름은 confide입니다. 이를 모두 기록하면 아래쪽의 CVSROOT라는 곳의 내용이 자동으로 완성됩니다. 물론 CVSROOT부분을 작성하셔도 위쪽의 내용이 자동으로 기입됩니다. 이제 CVSROOT 설정이 끝났으므로 서버에 사용자 인증(login)을 받아볼까요?

wincvs_login1.png
[PNG image (13.67 KB)]
로그인
wincvs_login2.png
[PNG image (5.58 KB)]
로그인시 나타나는 창 - CVSROOT 확인?
wincvs_login3.png
[PNG image (28.75 KB)]
로그인이 완료된 모습 - return값이 0

3. 모듈 생성하기(Import module ...)

CVS 클라이언트는 CVS서버에 있는 프로젝트 저장소를 이용하게 되는데, 이 공간을 이용하는 단위가 저장소(모듈 또는 디렉토리)단위입니다. 저장소 단위란 표현보다는 모듈단위란 표현이 적절할것 같아 지금부터는 모듈단위라고 설명합니다.

생성될 모듈은 CVS서버의 프로젝트 저장소에 위치하며, 모듈을 생성하기 위해서는 import명령을 사용하여 모듈을 생성할 수 있습니다.

  • 다음은 jane 프로젝트의 저장소를 표현한 예제 입니다.
/jane (project)
   +-- bin (module)
   +-- config (module)
   +-- help (module)
   +-- src (module)
   +-- samples (module)
   +-- lib (module) 
   +-- CVSROOT (jane 프로젝트에 대한 CVS 환경설정 디렉토리-프로젝트 저장소 생성시 자동 생성됨) 

그럼 모듈을 생성하는 방법을 예제를 바탕으로 알아보도록 하겠습니다.

StudyProject 디렉토리의 소스파일 2개를 StudyProject란 모듈명으로 CVS 서버에 모듈을 생성하도록 하겠습니다.

아래는 두 파일에 대한 소스코드입니다.
#!vim sh
#:::Hello.c:::
#include <stdio.h>
#include "Hello.h"



int main()
{
    PrintHello();

    return 0;
}



void PrintHello()
{
    printf("Hello, world!\n");
}

#:::Hello.h:::
#ifndef HELLO_H_
#define HELLO_H_

void PrintHello();

#endif

다음은 모듈을 생성하는 작업진행절차입니다.
  • Remote --> Import module ... 을 선택한다. 또는 ( Tree View에서 팝업메뉴로 Import module..을 선택한다. )
  • 폴더 찾아보기 대화상자가 나타난다.
  • 해당 디렉토리를 선택한다(여기서는 StudyProject를 선택한 예입니다).
  • Import filter란 대화상자가 나타난다(이상이 없을시 Continue 버튼을 누른다).
  • Import settings 대화상자가 나타난다(모듈명과 모듈에 대한 주석을 기술하고 확인 버튼을 누른다).
  • CVS 서버에 해당 모듈이 생성된다(이상이 없을시).

wincvs_example_project.png
[PNG image (27.42 KB)]
예제 프로젝트 파일들 화면

wincvs_import1.png
[PNG image (10.91 KB)]
import 과정1 화면 - WinCVS가 파일들의 특성파악(Binary/Text)

wincvs_import2.png
[PNG image (13.14 KB)]
import 과정2 화면 - 모듈 설명적기

wincvs_import3.png
[PNG image (28.79 KB)]
import 과정3 화면 - 완료

위 과정을 통해서 CVS 서버의 프로젝트 저장소에 StudyProject모듈을 생성했습니다. 이제 이 모듈(StudyProject)을 사용하기 위해서는 checkout명령을 사용하여 CVS서버에 있는 모듈을 내 컴퓨터의 작업공간으로 가져와 작업을 하면 됩니다.

4. 모듈 가져오기(Checkout module ...)

CVS 서버에서 CVS 클라이언트로 모듈을 가져오는 이유가 기술되어야함

CVS 서버의 프로젝트 저장소에 있는 모듈을 가져오기 위해서는 checkout이란 명령을 사용하며, 모듈을 가져오는 방법으로는 주 모듈(Main trunk)을 가져오는 방법과 특정 Tag 또는 파생 모듈(Branch)를 가져오는 방법이 있습니다.

4.1. 주 모듈(Main trunk) 가져오기

주 모듈(Main trunck)을 가져오기 위해서는 다음과 같은 작업진행절차를 따릅니다.
  • Remote --> Checkout module ... 을 선택한다. 또는 ( Tree View에서 팝업메뉴로 Checkout module..을 선택한다. )
  • Checkout settings란 대화상자가 나타난다.
  • Checkout settings탭에서 해당 모듈명을 기술한다.(여기서는 StudyProject를 기술하면 됩니다).
  • Checkout settings탭에서 작업공간에 저장될 디렉토리를 선택한다(선택된 디렉토리안에 모듈명으로 디렉토리를 생성한다).
  • General탭에서 CVS서버의 프로토콜을 설정한다(기본설정은Preferences에서 설정한 값들이 나타난다).
  • Globals탭에서 Checkout read-only 옵션이 설정되었다면, 설정을 해제한다.
  • 확인 버튼을 누른다.

4.2. 파생 모듈(Branch) 가져오기

파생 모듈(Branch)를 가져오는 방법은 주 모듈(Main trunk)을 가져오는 방법과 동일하며, 단지 차이점이란 파생 모듈(Branch)명을 기술하는 부분이 존재한다는 사실입니다. 주의) 파생 모듈(Branch)를 사용하기 위해서는 파생 모듈(Branch)를 생성해야만 합니다.

파생 모듈(Branch)을 가져오기 위해서는 다음과 같은 작업진행절차를 따릅니다.
  • Remote --> Checkout module ... 을 선택한다. 또는 ( Tree View에서 팝업메뉴로 Checkout module..을 선택한다. )
  • Checkout settings란 대화상자가 나타난다.
  • Checkout settings탭에서 해당 모듈명을 기술한다.(여기서는 StudyProject를 기술하면 됩니다).
  • Checkout settings탭에서 작업공간에 저장될 디렉토리를 선택한다(선택된 디렉토리안에 모듈명으로 디렉토리를 생성한다).
  • Checkout options탭에서 "By revision/tag/branch"옵션을 설정한다(파생 모듈(Branch)명을 기술한다).
  • General탭에서 CVS서버의 프로토콜을 설정한다(기본설정은Preferences에서 설정한 값들이 나타난다).
  • Globals탭에서 Checkout read-only 옵션이 설정되었다면, 설정을 해제한다.
  • 확인 버튼을 누른다.

5. 모듈 갱신하기(Update/Commit selection...)

모듈을 갱신한다는 것은 내 컴퓨터에서 작업한 모듈과 CVS 서버의 프로젝트 저장소에 있는 모듈을 일치시키는 작업을 말합니다. 이렇게 함으로써, 갱신된 파일(모듈에 소속된 파일)에 대한 리비젼(revision)이 하나 증가합니다(예 1.2 -> 1.3).

모듈을 갱신하는 방법에는 작업 공간을 갱신하는 방법(Update)과 저장소를 갱신하는 방법(Commit)이 있습니다.

주의) 참고로 갱신의 단위로는 파일,디렉토리, 모듈등이 있으며, 여기서는 모듈단위를 사용합니다.

5.1. 작업공간 갱신하기(Update selection...)

작업 공간을 갱신한다는 것은 최신의 작업 모듈로 변경한다고 보시면 됩니다. 최신의 작업 모듈을 가져오는 방법으로는 두가지 방법이 있습니다. 위에서 사용한 checkout이란 방법과 지금 보게될 update하는 방법입니다. 이 update명령을 사용하는 것이 좀더 직관적이라 할수 있습니다. 추가 설명 필요함(갱신에는 여러 경우가 존재할수 있음)

작업공간을 갱신하기 위해서는 다음과 같은 작업진행절차를 따릅니다.
  • Tree View 또는 File List View에서 모듈 명을 선택한다(해당 디렉토리 명을 선택한다).
  • Modify --> Update selection을 선택한다(모듈이 선택된 후에만 이 메뉴아이템은 활성화 됩니다).
  • Update setting이란 대화상자가 나타난다.
  • 각 탭의 세부 항목을 설정한다(갱신인 경우 설정하지 않아도 됩니다).
  • 확인 버튼을 누른다.(갱신이 된 파일이 있는 경우는 메세지 영역에 M으로 시작되는 메세지가 나옵니다. 또한 File List View의 아이콘이 빨간색으로 변경됩니다.)

5.2. 저장소 갱신하기(Commit selection...)

내 컴퓨터의 작업 공간에서 작업한 모듈들을 팀원이 공유하기 위해서는 반드시 CVS서버의 프로젝트 저장소에 모듈을 갱신해야 합니다. 이렇게 함으로써 팀원들은 자신의 작업 공간을 갱신함으로써 최신의 모듈을 유지할수 있습니다.

저장소을 갱신하기 위해서는 다음과 같은 작업진행절차를 따릅니다.
  • Tree View 또는 File List View에서 모듈 명을 선택한다(해당 디렉토리 명을 선택한다).
  • Modify --> Commit selection을 선택한다(모듈이 선택된 후에만 이 메뉴아이템은 활성화 됩니다).
  • Commit setting이란 대화상자가 나타난다.
  • 각 탭의 세부 항목을 설정한다(변경사항에 대한 메세지를 기록합니다).
  • 확인 버튼을 누른다.

6. 충돌 해결하기(Conflict)

충돌(Conflict)이란 갱신을 하는 시점에서 발생하는 메세지로, 내 컴퓨터의 작업공간에서 수정본과 CVS서버의 프로젝트 저장소에 있는 최신 모듈과의 사이에 같은 영역(함수,파일,등등)에서 수정이 일어날때 발생합니다. 이는 자동으로 해결될 소지가 아니기 때문에(의미적인 부분들기 때문에 CVS서버가 판단을 할수 없습니다) 반드시 수정한 팀원(관련자)과 상의를 하는것이 좋습니다.

다음은 충돌 발생시 메세지 입니다.
RCS file: /testcvs/StudyProject/Hello.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
Merging differences between 1.1.1.1 and 1.2 into Hello.c
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in Hello.c
C Hello.c
해석을 덧붙이자면:
RCS file: /testcvs/StudyProject/Hello.c,v  //testcvs란 프로젝트 저장소의 StudyProject 모듈에 있는 Hello.c에 대해서
retrieving revision 1.1.1.1                // 내 컴퓨터의 작업 공간에 있는 리비젼(Revision)이 1.1.1.1 이며
retrieving revision 1.2                    // CVS 서버에 있는 리비젼(Revision)은 1.2입니다.
Merging differences between 1.1.1.1 and 1.2 into Hello.c // hello.c 파일에 리비젼 1.2와 리비젼 1.1.1.1의 차이점을 합한다.
rcsmerge: warning: conflicts during merge   // 합치는 중에 충돌이 발생했다는 경고문구입니다.
cvs server: conflicts found in Hello.c      // 그래서 cvs서버는 hello.c파일에서 충돌(Conflicts)들을 찾았다고 보고합니다.
C Hello.c                                   // 그리고 C란 충돌표시(Conflicts)와 파일명을 알려줍니다.

다음은 충돌이 있는 파일의 일부(Hello.c파일의 PrintHello함수) 입니다.
void PrintHello()
{
    printf("Hello, world!\n");
<<<<<<< Hello.c
    printf("It's not fun\n");
=======
 
    printf("It's fun!\n");
>>>>>>> 1.2
}
해석을 덧붙이자면:
void PrintHello()
{
    printf("Hello, world!\n");
<<<<<<< Hello.c                      // 내 컴퓨터의 작업공간에서 작업한 내용이 먼저 표시됩니다.
    printf("It's not fun\n");        // 내 컴퓨터의 작업공간에서 작업한 내용(Revision 1.1.1.1을 기반으로 수정함) 
=======                              // 작업한 내용이 끝났다는 표시입니다.
                                     // CVS 서버의 최신 리비젼(Revision-1.2)의 내용
   printf("It's fun!\n");            // CVS 서버의 최신 리비젼(Revision-1.2)의 내용(누군가에 의해 두라인이 수정되었다는 의미)
>>>>>>> 1.2                          // CVS 서버의 내용이 끝났다는 표시입니다.
}

6.1. 해결 방법

충돌이 발생시는 여러 해결방안이 있을거라 생각되면, 위 경우는 다음과 같은 방법으로 해결하면 됩니다.

  • 수정한 담당자와 논의를 한다.
  • 그래서 적절한 결론을 내린다(여기서는 두라인 모두 추가하는 방향으로 결론을 짓습니다).
  • 그리고 수정 후 다시 저장소 갱신하기(Commit selection...)을 한다.
  • 그럼 CVS 서버는 해당 파일에 대한 리비젼(Revision)을 하나 증가시킵니다(1.2-> 1.3으로).
  • 그런 후에 팀원들은 다시 작업공간 갱신하기(Update selection...)을 수행한다.
논의후 수정한 내용입니다.
void PrintHello()
{
    printf("Hello, world!\n");
    printf("It's not fun\n");
    printf("It's fun!\n");
}


7. 파생모듈 생성하기(Create a branch/tag by module...)

파생모듈(branch)을 생성한다는 것은 CVS 서버의 프로젝트 저장소에 있는 모듈의 복사본을 하나 더 만드는 작업을 말합니다. 이렇게 함으로써, 새 모듈(버젼)에 대한 작업을 진행할 수 있습니다.

파생모듈(branch)을 생성하는 기본 방법은 먼저 태그를 생성하고 파생모듈(branch)을 생성하는 방법을 사용합니다.

7.1. 태그 생성하기(Create a tag by module...)

태그를 생성한다는 것은 특정 지점까지 작업을 했다고 표시해 두는 것입니다. 이렇게 함으로써, 이후에 필요한 특정 지점으로 복귀가 편리합니다.

태그를 생성하기 위해서는 다음과 같은 작업진행절차를 따릅니다.

  • Create --> Create a tag by module...을 선택한다.
  • Creating tag settings이란 대화상자가 나타난다.
  • Creating tag settings탭의 세부 항목을 설정한다.
    • New tag name : 새로운 태그명을 입력한다.
    • Module to tag : 기준이 되는 모듈명을 입력한다.
    • 추가적으로 시간(date)이나 태그(tag), 파생모듈(branch)등으로 태그를 입력할 시점을 설정할 수 있다.
  • 확인 버튼을 누른다.

7.2. 파생 모듈 생성하기(Create a branch by module...)

파생모듈(branch)을 생성하기 위해서는 다음과 같은 작업진행절차를 따릅니다.

  • Create --> Create a branch by module...을 선택한다.
  • Creating tag settings이란 대화상자가 나타난다.
  • Creating branch settings탭의 세부 항목을 설정한다.
    • New branch name : 새로운 파생모듈명을 입력한다.
    • Module to fork : 기준이 되는 모듈명을 입력한다.
    • 추가적으로 시간(date)이나 태그(tag), 리비전(revision)등으로 파생모듈(branch)를 입력할 시점을 설정할 수 있다.
  • 확인 버튼을 누른다.


8. 파일 추가/삭제하기(Add/Remove/Erase selection)

내 컴퓨터의 작업 공간에서 모듈을 작업하다보면 새로 생성된 파일, 또는 삭제해야할 파일들이 있습니다. 이럴때는 다음과 같은 명령어를 사용하여 작업하면 됩니다.

8.1. 파일 추가하기(Add selection)

파일을 CVS 서버에 추가하기 위해서는 다음과 같은 작업진행절차를 따릅니다.

  • Tree View 또는 File List View에서 파일 명을 선택한다(또는 디렉토리 명을 선택한다).
  • Modify --> Add selection을 선택한다(새로 생성된 파일에 대해서 이 메뉴아이템은 활성화 됩니다).
    (또는 팝업메뉴에서 Add selection을 선택한다-메뉴가 없다면 아래 팝업메뉴 설정하기 참조한다.)
  • 추가된 파일을 CVS 서버에 적용하기 위해서는 반드시 저장소 갱신하기(Commit selection...)을 수행한다.

8.2. 파일 삭제하기(Remove selection)

파일을 CVS 서버에서 삭제하기 위해서는 다음과 같은 작업진행절차를 따릅니다.

  • Tree View 또는 File List View에서 파일 명을 선택한다(또는 디렉토리 명을 선택한다).
  • Modify --> Delete selection을 선택한다.
    (또는 팝업메뉴에서 Delete selection을 선택한다-메뉴가 없다면 아래 팝업메뉴 설정하기 참조한다.)
  • 삭제된 파일을 CVS 서버에 적용하기 위해서는 반드시 저장소 갱신하기(Commit selection...)을 수행한다.

8.3. 파일 지우기(Erase selection)

파일을 내 컴퓨터의 작업 공간에서 지우기 위해서는 다음과 같은 작업진행절차를 따릅니다.

  • Tree View 또는 File List View에서 파일 명을 선택한다(또는 디렉토리 명을 선택한다).
  • Modify --> Erase selection을 선택한다.
    (또는 팝업메뉴에서 Erase selection을 선택한다-메뉴가 없다면 아래 팝업메뉴 설정하기 참조한다.)
  • 내 컴퓨터의 작업 공간에서 파일이 지워진다.
  • 지워진 파일은 CVS서버의 모듈에는 영향을 미치지 못하며 작업공간 갱신하기(Update selection...)을 수행하면 다시 갱신된다.

9. 변경사항 보기(Log/Status/Diff/Graph selection)


9.1. 기록 보기(Log selection...)


9.2. 상태 보기(Status selection)


9.3. 차이점 보기(Diff selection...)


9.4. 그래프 보기(Graph selection...)


9.4.1. 리비젼 가져오기(Retrieve revision)

9.4.2. 리비젼 삭제하기(Delete revisions)

10. 팝업메뉴 설정하기(Customize this menu...)


ID
Password
Join
You will be honored for contributing your time and skill to a worthy cause.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2005-04-07 10:33:50
Processing time 0.0241 sec