WinCVS
WinCVS의 간략한 사용방법
MS Windows 환경에서 가장 많이 알려진 CVS client를 꼽으라면 WinCVS가 아닐까 합니다. 이에 대한 간략한 사용방법에 대해서 기술하도록 하겠습니다.
1. 어디서 다운로드 하는가요? ¶CVS/FAQ 페이지에도 기술되어 있듯이
![]() ![]() ![]() 2. 처음 실행화면 ¶
3. 모듈 생성하기(Import module ...) ¶CVS 클라이언트는 CVS서버에 있는 프로젝트 저장소를 이용하게 되는데, 이 공간을 이용하는 단위가 저장소(모듈 또는 디렉토리)단위입니다.
저장소 단위란 표현보다는 모듈단위란 표현이 적절할것 같아 지금부터는 모듈단위라고 설명합니다.
생성될 모듈은 CVS서버의 프로젝트 저장소에 위치하며, 모듈을 생성하기 위해서는 import명령을 사용하여 모듈을 생성할 수 있습니다.
/jane (project) +-- bin (module) +-- config (module) +-- help (module) +-- src (module) +-- samples (module) +-- lib (module) +-- CVSROOT (jane 프로젝트에 대한 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 다음은 모듈을 생성하는 작업진행절차입니다.
위 과정을 통해서 CVS 서버의 프로젝트 저장소에 StudyProject모듈을 생성했습니다.
이제 이 모듈(StudyProject)을 사용하기 위해서는 checkout명령을 사용하여 CVS서버에 있는 모듈을
내 컴퓨터의 작업공간으로 가져와 작업을 하면 됩니다.
4. 모듈 가져오기(Checkout module ...) ¶CVS 서버에서 CVS 클라이언트로 모듈을 가져오는 이유가 기술되어야함
CVS 서버의 프로젝트 저장소에 있는 모듈을 가져오기 위해서는 checkout이란 명령을 사용하며, 모듈을 가져오는 방법으로는
주 모듈(Main trunk)을 가져오는 방법과 특정 Tag 또는 파생 모듈(Branch)를 가져오는 방법이 있습니다.
4.1. 주 모듈(Main trunk) 가져오기 ¶주 모듈(Main trunck)을 가져오기 위해서는 다음과 같은 작업진행절차를 따릅니다.
4.2. 파생 모듈(Branch) 가져오기 ¶파생 모듈(Branch)를 가져오는 방법은 주 모듈(Main trunk)을 가져오는 방법과 동일하며, 단지 차이점이란 파생 모듈(Branch)명을 기술하는 부분이 존재한다는 사실입니다. 주의) 파생 모듈(Branch)를 사용하기 위해서는 파생 모듈(Branch)를 생성해야만 합니다.
파생 모듈(Branch)을 가져오기 위해서는 다음과 같은 작업진행절차를 따릅니다.
5. 모듈 갱신하기(Update/Commit selection...) ¶모듈을 갱신한다는 것은 내 컴퓨터에서 작업한 모듈과 CVS 서버의 프로젝트 저장소에 있는 모듈을 일치시키는 작업을 말합니다.
이렇게 함으로써, 갱신된 파일(모듈에 소속된 파일)에 대한 리비젼(revision)이 하나 증가합니다(예 1.2 -> 1.3).
모듈을 갱신하는 방법에는 작업 공간을 갱신하는 방법(Update)과 저장소를 갱신하는 방법(Commit)이 있습니다.
주의) 참고로 갱신의 단위로는 파일,디렉토리, 모듈등이 있으며, 여기서는 모듈단위를 사용합니다.
5.1. 작업공간 갱신하기(Update selection...) ¶작업 공간을 갱신한다는 것은 최신의 작업 모듈로 변경한다고 보시면 됩니다. 최신의 작업 모듈을 가져오는 방법으로는 두가지 방법이 있습니다.
위에서 사용한 checkout이란 방법과 지금 보게될 update하는 방법입니다. 이 update명령을 사용하는 것이 좀더 직관적이라 할수 있습니다.
추가 설명 필요함(갱신에는 여러 경우가 존재할수 있음)
작업공간을 갱신하기 위해서는 다음과 같은 작업진행절차를 따릅니다.
5.2. 저장소 갱신하기(Commit selection...) ¶내 컴퓨터의 작업 공간에서 작업한 모듈들을 팀원이 공유하기 위해서는 반드시 CVS서버의 프로젝트 저장소에 모듈을 갱신해야 합니다.
이렇게 함으로써 팀원들은 자신의 작업 공간을 갱신함으로써 최신의 모듈을 유지할수 있습니다.
저장소을 갱신하기 위해서는 다음과 같은 작업진행절차를 따릅니다.
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. 해결 방법 ¶충돌이 발생시는 여러 해결방안이 있을거라 생각되면, 위 경우는 다음과 같은 방법으로 해결하면 됩니다.
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...) ¶태그를 생성한다는 것은 특정 지점까지 작업을 했다고 표시해 두는 것입니다. 이렇게 함으로써, 이후에 필요한 특정 지점으로 복귀가 편리합니다.
태그를 생성하기 위해서는 다음과 같은 작업진행절차를 따릅니다.
7.2. 파생 모듈 생성하기(Create a branch by module...) ¶파생모듈(branch)을 생성하기 위해서는 다음과 같은 작업진행절차를 따릅니다.
8. 파일 추가/삭제하기(Add/Remove/Erase selection) ¶내 컴퓨터의 작업 공간에서 모듈을 작업하다보면 새로 생성된 파일, 또는 삭제해야할 파일들이 있습니다. 이럴때는 다음과 같은 명령어를 사용하여 작업하면 됩니다.
8.1. 파일 추가하기(Add selection) ¶파일을 CVS 서버에 추가하기 위해서는 다음과 같은 작업진행절차를 따릅니다.
8.2. 파일 삭제하기(Remove selection) ¶파일을 CVS 서버에서 삭제하기 위해서는 다음과 같은 작업진행절차를 따릅니다.
8.3. 파일 지우기(Erase selection) ¶파일을 내 컴퓨터의 작업 공간에서 지우기 위해서는 다음과 같은 작업진행절차를 따릅니다.
|