본문 바로가기

Programming

CVS 강좌

+========================================+
1 장 CVS 설정
+========================================+

=======
CVS란?
=======

cvs(Concurrent version system)는 각종 파일들의 버젼을 쉽게 관리할 수 있도록
도와주는 툴 프로그램입니다. 그리고, 여러 사람들이 동시에 프로젝트를 개발할때
이 사람들의 소스들을 하나로 통일 시켜 주고 서로 반영 시켜 줄 수 있습니다.
물런 혼자서 이 툴을 사용한다해도 소스 백업및 소스의 일관성 유지 소스를
패키징화 할 수 있습니다. 그리고 소스의 변화 상황들도 쉽게 알 수 있습니다.
유닉스 쉘에서 명령어로 이러한 것들의 모든 작업을 할 수 있지만,
웹 브라우저에서 소스를 검색할 수 있으며 버젼 관리를 할 수 있는 프로그램들
또한 개발 되어 있어서 한번 설치를 해 두면 개발자에게 많은 도움을 줍니다.
처음 접하기가 여러운 편이지 한번 익히면 정말 편하고, 제가 직접 사용해 본 결과
정말 강력히 추천하는 툴입니다.

================
CVS의 동작 방식
================


+---- b서버
CVS 저장소 -------+---- c서버
(A 서버) +---- d서버
...

CVS는 위의 그림과 같이 CVS 저장소가 있어야 합니다.

A 서버에는 CVS 저장소로서 CVSROOT가 세팅 되어 있어야 합니다.
그리고 b, c, d서버에는 CVS 클라이언트로서 어떠한 서버를 CVSROOT로 정할 것인가에
해한 정보를 세팅 하여야 합니다. (세팅 방벙은 간단합니다. ^^)

위와 같이 구성이 되었다면, b 또는 c 또는 d 서버 모두에서 A서버의 저장소에
있는 모든 파일들을 가져 올 수 있습니다. 그리고 b또는 c또는 d 서버의 변경 내용을
A서버의 저장소에 저장을 할 수 있으며, b, c, d 클라이언트의 파일 내용들을
동일하게 업데이트 할 수 있습니다.


====================
CVS 저장소 세팅 하자
====================

CVS 저장소는 파일들의 원본들이 위치할 서버 입니다. 이 CVS서버는 파일 용량이
충분한것이 좋으며 서버의 안정성이 확보된 것이 좋습니다.

저장소 초기화
$ cvs -d /home/jinowin/CVSROOT init

만약에 여러명의 계정 사용자가 CVS 저장소를 사용하게 하기 원할때에는 임의의
사용자 그룹(예: dev)을 생성하여 dev그룹으로 여러 사용자 계정을 만들어 줍니다.
그후 그룹에 write권한을 줍니다. 물런 한명이 사용할 경우 이 과정은 필요 없습니다.

$ chmod -R g+w /home/jinowin/CVSROOT

/etc/services화일에 아래와 같은 내용이 있는지 확을 하고 없으면 추가하여 줍니다.
cvspserver 2401/tcp
cvspserver 2401/udp

CVS 저장소를 부팅시 자동으로 실행 할 수 있게 하여 줍니다.
/etc/inetd.conf 사용일 경우, 아래의 행을 추가 하여 줍니다.

cvspserver stream tcp nowait root /usr/bin/cvs cvs
--allow-root=/home/jinowin/CVSROOT pserver

만약 xinetd를 사용중이면, /etc/xinetd.d 디렉토리 아래에 cvsserver라는 이름으로
아래와 같은 화일을 만들어 줍니다.

# default: on
# description: The cvspsever serves CVS Passowrd Server sessions; it uses \
# unencrypted username/password pairs for authentication.
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = --allow-root=/home/cvs pserver #<-- 이부분 수정해주어야 합니다.
# 저의 경우는 /home/jinowin/CVSROOT
log_on_failure += USERID
}

지금까지 세팅이 끝났으면 inetd를 재시작 해 주어야 합니다.
inetd의 프로세스아이디를 알아 낸 다음 HUP 시그널을 주어 재 시작 시켜 줍니다.

# ps -ax | grep inet
749 ? S 0:00 xinetd -stayalive -reuse -pidfile /var/run/xinetd.pid
# kill -HUP 749

=====================
CVS 클라이언트 테스트
=====================

.profile이나 .bash_profile과 같이 각 쉘에 맞는 시작파일에 아래의 내용을 써줍니다.
CVSROOT=:pserver:jinowin@cvs.jino.com:/home/jinowin/CVSROOT
export CVSROOT

재로그인 한 다음 아래와 같은 내용이 보여야 합니다.
env | grep CVSROOT
CVSROOT=:pserver:jinowin@cvs.jino.com:/home/jinowin/CVSROOT

아래와 같이 cvs 로그인을 합니다. 아래와 같이 아무런 메시지 없이 다음 쉘이 떠야 합니다.
$ cvs login
Logging in to :pserver:jinowin@61.37.47.49:2401/home/jinowin/CVSROOT
CVS password:
$


+========================================+
1 장 CVS 사용하기
+========================================+

0. CVS 서버 접속
- cvs logout (기존 접속 해제)
- cvs login

주의) 한 디렉토리 안에서 동시에 다른 두개의 CVS 서버에 접근할수 없습니다.

현재 디렉토리에 CVS 디렉토리가 있으면, 그 디렉토리는
오직 하나의 CVS 서버만 이용할 수 있기 때문입니다.

1. 디렉토리 골격 만들기

mkdir game
mkdir game/src
mkdir game/doc
cd game
vi README .....

주의) 디렉토리 안에 적어나 하나의 파일이 있어야 디렉토리가 등록됨.

2. 프로젝트 등록

cd game
cvs import -m "my first project" game kitel release-0-0


3. 프로젝트 꺼내기 (checkout)

cvs checkout game


4. 소스 추가

cvs add readme.txt (추가 계획 에 등록)
cvs commit readme.txt (실제 추가)

/* $Id$ */ <--- 버전 정보

5. 프로젝트 넣기 (release)

cvs release -d game

6. 소스 버전 업데이트

1. 충돌확인 (다른 사람이 프로젝트 소스를 업데이트 했는지 확인)

- cvs update [패스명]
--> U : updated - 다른 사람이 소스를 변경함(새로운 화일 생성).
--> P : 다른 사람이 소스를 변경함.
--> C : conflict - 다른사람과 내가 작업한 소스가 충돌. (다른 사람이 먼저 commit 하였음)
--> M : modified - 내가 소스를 변경함.
--> Merged the difference of ... - 다른 사람과 내가 작업한 소스가 충돌하는 영역은 없지만,
다른 사람이 먼저 commit 했기 때문에, 내가 작성한 소스는
CVS 프로그램이 .xxxx#?.? 이름으로 백업하고, 다른 사람이
만든 갱신 내용을 내가 작성한 소스에 병합 했음을 나타냅니다.

2. 소스 업데이트

- cvs commit


8. 작업 내용 확인

- cvs log

9. 버전 별 차이별 차이점 확인

- cvs diff -c -r1.4 -r1.5

10. 원하는 버전 뽑기

- cvs update -r1.4 main.c


11. 릴리즈 만들기

- cvs tag release-1-0 .

주의) 릴리즈를 만든 다음에는 cvs release 로 작업디렉토리를 지운다음 다시 checkout 으로 풀어야 함.

12. 패치 만들기

예) 1.4 버전을 1.7 로 업그레이하는 패치 만들기
cvs diff -c -r1.4 -r1.7 main.c > main.patch

예) 적용시키는 방법
main.c 가 있는 디렉토리에서 patch -p < main.patch

 

III. 더 자세히 알려면
- CVS 홈페이지 : http://www.cyclic.com

'Programming' 카테고리의 다른 글

Apache MIME Type 추가 방법  (0) 2008.07.24
Singleton supported thread-safe  (0) 2008.07.03
UML(Unified Modeling Language)  (0) 2008.04.08
UML fro JAVA Programming  (0) 2008.04.08
MySQL 원격 접속 설정  (0) 2008.03.04