[패키지] CVS 10분만 하면 yjlee만큼 할 수 있다

cvsintro-0.2.txt – CVS 10분만 하면 yjlee만큼 할 수 있다 – 0.2

Clunix, yjlee@clunix.com, 2000.5.29,2002.3.4.

CVS는 Concurrent Versions System 의 약자로 여러 개발자가 동원되고 복잡한 revision,

configuration이 필요한 version관리를 위해 사용되는 간단하고 편리한 시스템입니다.

CVS는 모두 cvs라는 program하나를 가지고 수행하며 “cvs <command> <option> [file…]”

와 같은 형태로 호출하며, 모든 명령은 기본적으로 현재 directory와 하위 directory의 모든

파일에 대하여 적용됩니다.

CVS에서는 repository 와 working directory로 구성됩니다. Repository는 실제 작업

directory와 동일한 구조의 directory구조에 작업 file의 RCS file이 저장되어 있고,

working directory는 실제 작업 directory로써 모든 directory마다 CVS 라는

subdirectory를 포함하게 됩니다.(cvs가 만들어줌) CVS에서는 repository를 지정하기

위해 CVSROOT라는 환경 변수를 사용합니다. (또는 -d option)

1. 우선 Repository를 만들자면(init), (bash shell 기준, HOME은 /home/yjlee라고 가정)

  # export CVSROOT=/home/yjlee/cvs

  # cvs init

그럼 /home/yjlee/cvs 라는 directory가 만들어지고, 이 안에 CVSROOT라는 cvs의

configuration을 위한 directory가 만들어집니다.

2. cvs에 cm을 /home/yjlee/cvs/cm 로 등록하겠습니다. (import)

  # cd 어쩌구저쩌구/cm

  # cvs import cm clunix cm-1_0

이때 log를 넣으라고 편집기가 뜨고, 끝나면 cvs 작업이 계속됩니다.

여기서 clunix와 cm_base는 vender_tag와 release_tag로 적당한 이름을 주면 됩니다.

CVS에서는 release나 configuration mark를 위하여 “tag” 라고 부르는 symbol을 사용하는데,

이때 주의할 점은 tag에는 ‘.’이 들어갈 수 없다는 겁니다. 이러한 이유로 cm-1.0 이라는

symbol 대신 cm-1_0 이라는 symbol을 사용합니다.

이렇게 한번에 등록되는 단위(directory단위와 같죠)를 cvs에서는 module 이라고 부릅니다.

다른 모듈을 또 등록할 때는 init 없이 import만을 다시 수행하면 됩니다.

3. 등록된 module을 꺼내겠습니다. (checkout)

  (아까의 원래 작업 directory는 다른데 치워 놓고요)

   # cvs co cm

그럼 ./cm 이 만들어지고 아까 득록된 파일 들이 풀리고, ./cm 에는 CVS라는 directory가

생깁니다. 이렇게 풀린 directory를 working directory라고 합니다.

4. 작업 중 변경된 사항을 check in 하려면(update), working directory내에서

  # cvs up

하면 됩니다. 이러면, repository가 가지고 있는 내용과 현재 작업내용을 비교하고,

repository내의 최신 내용으로 working directory를 update해줍니다. 이때 “C” 라고

나타나는 파일은 confilict가 있음을 나타내고 이럴때는 편집기로 해당 file에 들어가서

  <<<<<<<

    xxx … (working)

  =======

    xxx … (repository)

  >>>>>>>

로 표시된 부분을 정리하면 됩니다.

5. Repository로 working directory내용 올리기(commit or checkin)를 하려면

  # cvs ci

를 하면, Log를 입력하라고 편집기가 뜬 뒤, 현재 working directory의 변경 내용을

repository에 저장합니다. cvs ci 전에는 반드시 cvs up 을 해주어야 합니다.

6. 현재의 configuration에 tagging을 하려면

  # cvs tag cm-1_2

를 하면 됩니다. 나중에 이 configuration의 파일들을 끄집어내려면 “cvs co -r cm-1_2 cm”

과 같이 -r option을 사용하여 checkout하면 됩니다.

7. 현재 모듈에 새로운 파일 babo.c 를 등록하려면 (add)

  # cvs add babo.c

를 한 뒤 commit하면 됩니다. 디렉토리의 경우도 마찬가지 입니다.

Import를 하게 되면 repository내 module의 예전 값이 없어지므로 주의하여야 합니다.

Binary파일을 저장하는 경우에는

  # cvs add -ko babo.img

와 같이 add시에 -ko option을 사용하면 됩니다.

만일 실수로 binary 파일을 -ko 옵션 없이 저장하였을 때에는

  # cvs admin -ko babo.img

를 수행하면, -ko 옵션을 줄 수 있습니다.

8. 현재 모듈에 있던 gusi.c 를 제거하려면 (remove)

  # rm gusi.c

  # cvs remove babo.c

하고, commit하면 됩니다.

9. babo.c의 버전 목록과 log를 보려면 (history)

  # cvs log babo.c

를 하시면 됩니다.

10. 두 configuration (or revision)간의 difference (or patch)를 구하려면

  # cvs diff -r cm-1_1 -r cm-1_2

하면 됩니다. 이 output을 잡은 파일은 patch command의 입력으로 사용할 수 있습니다.

11. Remote machine에 있는 repository를 이용하는 방법 중 rsh을 사용하는 방법은

  # cvs -d :ext:yjlee@develope.somewhere.com:/home/yjlee/cvs co cm

와 같이 하면 됩니다. 이후 checkout된 directory내에서 작업할 때에는 -d … 에

해당하는 내용이 CVS directory에 들어가 있는 값을 사용하기 때문에 -d 옵션을 더 이상

주지 않아도 됩니다.

12. “cvs diff -x” 와 같이 각 command에 잘못된 argument를 주면 간단한 도움말이 나옵니다.

또 “cvs x” 와 같이 잘못된 command를 넣으면 command list가 나옵니다.

References

– CVS Homepage: http://www.cyclic.com

– 장우현, “CVS 이야기”: http://www.mizi.co.kr/~louis/cvs/cvs.html

– 김민식, “CVS 사용”: http://webdox.co.kr/app/cvs.shtml

.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.