CVS User Guide

1999/04/23 22:48 / 컴퓨터 기술

CVS User Guide


CVS 소개

  • CVS = Concurrent Versions System
  • CVS 는 버전 관리 시스템이다.
  • CVS 는 RCS 와 달리 다수의 개발자가 동시에 파일 을 관리하게 해준다.
  • CVS 는 관리하는 파일 들을 CVS 저장소 (CVS Repository) 라고 부르는 특정 장소에 중앙 집중적으로 저장한다.
  • CVS 는 리모트 서버를 통해 접근할 수 있다.
  • CVS 명령은 다음과 같은 형식이다.
    cvs [전체_옵션] 명령어 [명령어_옵션] [명령어_인수]
  • CVS 명령어 에는 다음과 같은 것이 있다.
    import checkout update add remove commit tag release

CVS 작업 흐름도

  • CVS 를 사용하여 협동 작업을 하는 경우의 일반적인 작업 흐름도는 다음 그림 과 같다.

CVS Workflow


CVS 저장소 설정

  • CVS 저장소가 로컬 디스크에 있을때
    bash$ export CVSROOT="/nfs/myhost/repository"
  • CVS 저장소가 리모트에 있을때 (자신의 로컬 컴퓨터를 통해 넷웍으로 원격지의 CVS 저장소를 사용할때)
    bash$ export CVSROOT=":pserver:user@myhost.com:/nfs/myhost/repository"
    bash$ cvs login(Logging in to user@myhost.net)
    CVS password:
    bash$

새 프로젝트 초기화

  • 새 프로젝트를 시작하려면 먼저 빈 디렉토리 (myproj) 를 하나 만든후 그 곳으로 이동한다.
    bash$ mkdir myproj
    bash$ cd myproj
  • 새 디렉토리를 CVS 저장소에 등록한다.
    bash$ cvs import -m "설명" myproj MY_NAME REL_0
    설명 에는 새로 시작하는 프로젝트에 대한 간단한 설명문을, 그다음 인수에는 프로젝트 디렉토리명을, LEOKIM 은 프로젝트를 시작하는 사람이나 조직명을 (vendor-tag), 마지막 인수에는 release tag 을 넣는다. 여기서는 REL_0 으로 release 0 이라고 하였다.
  • 성공적으로 CVS 저장소에 등록 (import) 되었으면 디렉토리를 지운다. 이후 지금 생성한 프로젝트 디렉토리는 cvs checkout 명령으로 디렉토리 이하 저장된 내용을 모두 가져와서 작업하게 된다.
    bash$ cd ..
    bash$ rmdir myproj

프로젝트 시작

  • 자신 또는 다른 사람의 프로젝트에 참여해서 작업하려면 먼저 프로젝트 디렉토리명 (또는 모듈명) 을 알아야 한다.
  • 프로젝트 디렉토리명은 CVS 저장소의 최상위 디렉토리 내용을 조사해 보면 알 수 있다.
    bash$ ls /project/Repository
    CVSROOT bbs cvsweb htdocs perl todoapache cvs dot.files httpd-conf templbash$
  • 또는 CVS 웹 브라우저 를 통해 열람해 볼 수도 있다.
  • 위의 예제에서 CVSROOT은 CVS 저장소 설정에 관련된 파일 들이 들어있으며 나머지는 전부 프로젝트 관련 디렉토리들이다.
  • 작업할 프로젝트 디렉토리를 정했으면 (CVSROOT 도 다른 디렉토리와 마찬가지로 취급된다.) cvs checkout 명령으로 저장소의 내용을 자신의 작업환경에 가져온다.
    bash$ mkdir work
    bash$ cd work
    bash$ cvs checkout htdocs
    bash$ cd htdocs

최신 자료 유지

  • CVS 는 협동 작업을 지원하므로 다른 작업자가 수정한 내용과 자신의 작업환경 사이에 차이가 생길 수 있다. 따라서 작업을 시작하기 이전 또는 자주 cvs update 명령으로 작업환경과 CVS 저장소의 내용을 동일하게 유지해야 한다.
    bash$ cd work/htdocs
    bash$ cvs update

  • 일상 작업

    편집

    • 보통 파일 편집하는 것과 다른 점이 없으며 다만 파일 에 다음과 같은 RCS 지정자를 삽입하여 최근 수정일, 고친 사람, 개정판 번호 등의 정보를 알기 쉽게 한다. (매뉴얼 페이지 co (1) 참고)
      • $Id$
      • $Date$
      • $Revision$
      • $Log$

    추가

    • 파일 이나 디렉토리 모두 동일한 방법으로 아래와 같이 CVS 저장소에 추가한다.
    • 단, cvs commit 명령을 수행하기 전까지는 실제로 CVS 저장소에 저장하지 않는다.
    • 문서가 아닌 이미지 같은 바이너리 파일 도 추가해서 CVS 저장소에 넣을 수 있는데 이때에는 반드시 -kb 옵션을 주어야 한다.
      bash$ mkdir newdir
      bash$ cvs add newdir
      bash$ cd newdir
      bash$ vi newfile.c
      bash$ cvs add newfiles.c
      bash$ cp ~/somewhere/img/test.gif .
      bash$ cvs add -kb test.gif
      bash$ cd ..
      bash$ cvs commit

    삭제

    • 불필요한 파일 이나 디렉토리 를 CVS 저장소에서 삭제할 수 있다.
    • 추가와 마찬가지로 cvs commit 명령을 수행하기 전까지는 실제로 CVS 저장소에서 삭제하지 않는다.
      bash$ rm newfile.c
      bash$ cvs remove newfile.c
      bash$ cvs commit

    작업 내용 영구 저장

  • 자신의 작업환경에서 변동된 내용을 cvs commit 명령으로 CVS 저장소에 알려주기 전까지는 다른 개발자는 변경 사항을 알 수 없다.
  • Commit 된 내용은 다른 개발자들이 cvs update 하므로써 변경 사항이 전파되게 된다.
  • 대부분의 CVS 명령이 그러하듯 commit 명령도 recursive 하게 수행된다.

  • 충돌 해결 방법

  • 개발자들 간에 update 하고 commit 하는 시간차이가 있어 변경된 내용이 서로 일치하지 않으면 commit 할때 충돌 (conflict) 이 일어난다.
  • 충돌이 일어나면 해당 파일을 편집기로 열어 >>>>>>>> 부터 <<<<<<<< 사이의 충돌나는 부분을 편집한 후 다시 commit 을 시도 하면 된다.

  • Snapshot 생성

  • 어느 한 시점에서의 프로젝트 파일들에 동일한 꼬리표 (TAG) 을 붙일 수 있다.
  • 이것은 각각의 파일 들의 개정판 번호가 시간이 흐를수록 제각기 되기 때문에 특정 시점의 파일 들을 항상 동일하게 꺼낼 수 있게 해준다.
  • 예를 들어 A 라는 프로그램이 a.c, b.c, c.c 라는 소스 파일로 구성되어 있을때 현재의 파일 들에게 REL_1_0 이라는 꼬리표를 붙인다.
    a.cb.cc.c
    .........
    ...1.1...
    1.61.22.3
    1.71.32.4- REL_1_0
    1.81.42.5
    1.9...2.6
    .........
    bash$ cd prog_a
    bash$ cvs commit
    bash$ cvs tag REL_1_0
  • 이후 A 프로그램의 Version 1.0 은 계속 개발이 진행되더라도 REL_1_0 꼬리표를 사용해서 CVS 저장소로부터 꺼낸다.
    bash$ cvs co -rREL_1_0 prog_a
    bash$ cd prog_a

  • 참고 문헌

    1999/04/23 22:48 1999/04/23 22:48
    Posted by ace.
    TAGS 이올린 태그검색올블로그 태그검색, 이올린 태그검색올블로그 태그검색

    Trackback URL : http://par.sarang.net/trackback/136


    Leave your greetings here.

    1. Comment RSS : http://par.sarang.net/rss/comment/136
    2. OpenID Logo 곰발 2009/08/21 00:30  Modify/Delete  Reply  Address

      감사합니다 ^^ 많은 도움 되었어요

      • OpenID Logo ace 2009/08/21 09:29  Modify/Delete  Address

        댓글 감사합니다.
        요즘은 CVS보다는 Subversion이 더 많이 쓰이는 것 같습니다.
        저도 지금은 Subversion을 주로 쓰고 있고요.
        감사합니다.

    [로그인][오픈아이디란?]
    « Previous : 1 : ... 384 : 385 : 386 : 387 : 388 : Next »