금요일, 12월 09, 2005

cvs 사용법

CVS

  • 작성: eekplus
    1. CVS 설치방법
      1.1. Linux 설치
        1.1.1. 계정생성
        1.1.2. xinet.d등록
        1.1.3. xinet restart
      1.2. test
      1.3. 초기화
    2. CVS 명령어 사용법
      2.1. 계정생성
      2.2. 새 프로젝트는 어떻게 만드나요?
      2.3. Login
      2.4. Check out
        2.4.1. 메인버젼 꺼내 오기
        2.4.2. 특정버젼 꺼내 오기
      2.5. Update
      2.6. Commit(저장)
      2.7. Diff(비교)
      2.8. Remove(삭제)
      2.9. Add(파일 추가)
      2.10. 특정파일무시하기
      2.11. branch는 어떻게 만들죠?
      2.12. FAQ
    3. 참고 자료

1 CVS 설치방법

1.1 Linux 설치

1.1.1 계정생성

  • root 계정으로 cvs계정과 cvs 그룹을 생성한다.
    $ adduser cvs

1.1.2 xinet.d등록

  • /etc/xinet.d에 서비스로 등록한다.
  • vi /etc/xinet.d/cvspserver
    # default: on
    # description: cvs pserver
    service cvspserver
    {
    disable = no
    flags = REUSE
    socket_type = stream
    wait = no
    user = root
    server = /usr/bin/cvs
    server_args = -f --allow-root=/home/cvs pserver
    log_on_failure += USERID
    }

1.1.3 xinet restart

  • cd /etc/init.d/
  • ./xinetd restart
    xinetd 를 정지함: [ 확인 ]
    xinetd (을)를 시작합니다: [ 확인 ]

1.2 test

  • telnet localhost 4300
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.

    cvs [pserver aborted]: bad auth protocol start:

    Connection closed by foreign host.

1.3 초기화

  • su - cvs
  • cvs -d /home/cvs init
  • ls -a
    . .. CVSROOT

2 CVS 명령어 사용법

2.1 계정생성

  • cvs가 설치되어있는 위치 CVSROOT의 passwd파일에 사용자 ID와 PASSWORD를 입력한다.
    $ cd /home/cvs/CVSROOT/
    $ mkpasswd
    makepasswd - generates system password entry for cvsd

    usage: ./mkpasswd user password

    $ ./mkpasswd test test123
    makepasswd - generates system password entry for cvsd

    put this line into /CVSROOT/passwd
    test:xB0y/2RhqIHx6:cvs

    # passwd파일을 open후 "test:xB0y/2RhqIHx6:cvs"이 라인을 복사하여 추가한다.
    $ vi passwd

2.2 새 프로젝트는 어떻게 만드나요?

$ ls proj/
README a.c a.h
$ cd proj/
$ cvs import -m "this is the project" proj VENDOR INIT
$ ls /var/cvsroot/
CVSROOT/ proj/
$ ls /var/cvsroot/proj/
README,v a.c,v a.h,v

2.3 Login

  1. 최초 로그인 시
    touch ~/.cvslogin
  2. CVSROOT설정
    bash, ksh
    export CVSROOT=:pserver:xxx@test.mobigen.com:/home/cvs
    csh
    setenv CVSROOT :pserver:xxx@test.mobigen.com:/home/cvs

    xxx부분에 계정명을 입력한다.
    예)
    $ export CVSROOT=:pserver:eek@test.mobigen.com:/home/cvs
  3. cvs 를 사용하기 위해서 cvs에 접근하기 위한 권한을 얻는 방법으로 로그인을 합니다. 계정을 만드는 방법은 추후에 내용을 추가 하겠습니다.
    $ cvs login
    Logging in to :pserver:eek@test.mobigen.com:2401/home/cvs
    CVS password:

    비밀번호를 입력합니다.

2.4 Check out

2.4.1 메인버젼 꺼내 오기

  • 현재 개발하고 있는 프로젝트 이름을 입력합니다. 예) mobi
    cvs checkout mobi

2.4.2 특정버젼 꺼내 오기

  • 메인버젼을 개발 도중 특정 버젼으로 패키지한 버젼의 소소코드를 꺼내오기 싶은경우
    cvs checkout -r 버젼_번호 프로젝트명
    예)
    cvs checkout -r r2-8-0 mobi

2.5 Update

  1. checkout한경우 변경된 내용만 받아 올 수 있도록 하는 기능
    • check out한 디렉토리로 이동하여 명령을 실행한다.

    $ cvs update
    ? Makefile
    cvs server: Updating .
    ...
    U htable.C
    U htable.h
    ...
  2. U, P 표시는 cvs에서 수정이 된 파일 기존에 파일이 변경됨
  3. M 표시는 사용자가 파일을 수정한 경우 M flag가 표시됨
  4. C 표시는 사용자가 파일을 수정한 경우 CVS 메인 버젼과 충돌이 생긴 경우
    • 충돌 후 해결을 참조
  5. ? 표시는 CVS에 저장 되어 있지 않는 파일 또는 디렉토리
  6. A 표시는 CVS에 사용자기 추가하기 전 상태 삭제를 적용하기 위해서는 cvs commit명령을 수행한다.
  7. R 표시는 CVS에 있는 파일을 삭제하기 전 상태 삭제를 적용하기 위해서는 cvs commit 명령을 수행한다.

2.6 Commit(저장)

  1. repository로 보낼려면 commit을 수행하면 됩니다.
    수정한 파일 하나만 올린다
    $ cvs commit 파일명
    또는
    수정한 모든 파일을 올린다
    $ cvs commit

2.7 Diff(비교)

  1. 수정된 내용을 확인하고 싶은경우
    $ cvs diff 파일명
  2. 수정된 내용을 이전버젼과 비교하고 싶은경우
    $ cvs diff -r 1.2 파일명

2.8 Remove(삭제)

  1. 파일 지우기
    $ rm 파일명
    $ cvs remove 파일명
    $ cvs commit
    Removing 파일명;
    파일명,v <-- 파일명
    new revision: delete; previous revision: 1.1
    done

2.9 Add(파일 추가)

  1. 파일 추가
    $ cvs update
    ? add_file <-- 아직 추가 되어있진 않은 상태로 보인다.
    $ cvs add add_file1 [add_file2] [add_file3] [add_file4]
    $ cvs update
    A add_file <-- 추가되기 위한 전단계
    $ cvs commit add_file <-- 파일추가
  2. Dir 추가
    • Dir을 추가 하고 앞에 있는 파일은 파일 추가 절차에 따른다.

    $ mkdir a_dir
    $ cvs add a_dir
    $ cvs commit a_dir
    $ cd a_dir
    $ ls
    CVS/
    $

2.10 특정파일무시하기

  • .o 파일 이나 임시 파일을 cvs를 저장하면 컴파일할때마다 update되었다고 표시된다 이런경우 삭제하면 update하는 경우에 다시 내려받기 때문에 cvs에서 리스트 무시하도록 표시하는 기능을 제공한다.
  • ※ 주의: .cvsignore파일도 cvs에 add하지 않으면 다른 사용자와 같은 환경을 공유할 수 없다.
    $ vi .cvsignore
    #무시하고 싶은 파일을 기록한다.
    *.obj
    *.o
    *.tmp
    *.log
    $ cvs add
    $ cvs commit

2.11 branch는 어떻게 만들죠?

  1. 특정 버젼 쉽게 만드는 법
    브랜치를 쉽게 만드는 방법입니다.
    $ cvs tag -b BRANCHNAME
    이 명령을 실행한 작업소는 앞으로 이 브랜치로 작업을 하게 됩니다.
  2. ※ 특정 버젼을 가지고 오는 방법을 찾조하시면 됩니다. ;)

2.12 FAQ

  1. undelete
$ cvs checkout project; cd project
$ cvs update foo.c
$ cvs tag release-1 .
$ cd ..; cvs release -d project

$ cvs checkout -r release-1 project
$ cvs release -d project


$ cvs rtag -b -r release-1 release-1-patches project
$ cvs checkout -r release-1-patches project
$ cvs commit -m "Fixed printf bug" foo.c
$ cd ..; cvs release -d project



--------------------------------------------------------------------------------
cvs를 사용할 때 Branch를 해서 버젼을 만들고 메인 버젼이 올라가면 다시 메인버젼과 머지를 하고.. 등의 작업을 수행할 때, 먼저 브랜치를 할 파일들에 태그를 달아주고 태그를 기준으로 브랜치를 만드는 것이 편한 것 같습니다.


명령어는 다음과 같습니다.


cvs rtag -r arab -b arab_xxx ggg


이렇게 하면 ggg라는 프로젝트에서 arab 태그가 붙은 것을 arab_xxx 브랜치로 작성하겠다. 라는 의미가 됩니다. 태그는 먼저 달아주어야 하겠지요.


그리고 태그와 브랜치는 다르다는 점을 미리 아시면 좋겠고.. 만일 wincvs를 사용하신다면 graph를 보시게 되면 tag는 검정색 얇은 선 브랜치는 파란색 굵은 선으로 나뉘는 것을 알 수 있습니다. --최성우 / eatingstars.com


브랜치를 쉽게 만드는 방법입니다.
$ cvs tag -b BRANCHNAME
이 명령을 실행한 작업소는 앞으로 이 브랜치로 작업을 하게 됩니다.

3 참고 자료

댓글 없음: