강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

CVS(Concurrent Versions System)

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

CVS(Concurrent Versions System)

 

t.gif
t.gif
보통 리눅스배포본은 기본적으로 CVS를 설치해둔다.
하지만, 항상 내가 추구하는 방향인 소스컴파일로 진행하겠다.
하지만, 꼭 이렇게 할 필요없다. 소스컴파일하기 싫으면 그냥 rpm사용해도 전혀 지장없다.
rpm으로 설치된 CVS를 삭제하고, www.cvshome.org에서 CVS의 최신버전을 받아온다.


CVS 설치

[root@ns /down]# rpm -e cvs
[root@ns /down]# wget ftp://ftp.cvshome.org/pub/cvs-1.11/cvs-1.11.tar.gz
--15:35:02--  ftp://ftp.cvshome.org:21/pub/cvs-1.11/cvs-1.11.tar.gz
           => `cvs-1.11.tar.gz'
Connecting to ftp.cvshome.org:21... connected!
Logging in as anonymous ... Logged in!
==> TYPE I ... done.  ==> CWD pub/cvs-1.11 ... done.
==> PORT ... done.    ==> RETR cvs-1.11.tar.gz ... done.

    0K -> .......... .......... .......... .......... ..........
   50K -> .......... .......... .......... .......... ..........
   중략
2200K -> .......... .......... .......... .......... ..........
2250K -> .......... .......... .......... ........

15:37:28 (15.87 KB/s) - `cvs-1.11.tar.gz' saved [2343288]

[root@ns /down]# tar xvzf cvs-1.11.tar.gz -C /usr/local/src
[root@ns /down]# cd /usr/local/src/cvs-1.11/
[root@ns cvs-1.11]# ./configure --prefix=/usr/local/cvs
[root@ns cvs-1.11]# make; make install


password mode server를 사용하기 위한 설정(네트웍을 이용하여 CVS사용)

/etc/inetd.conf
cvspserver stream  tcp  nowait  root  /usr/local/cvs/bin/cvs -f --allow-root=/home/cvs pserver

/etc/services
cvspserver      2401/tcp                        # CVS client/server operations
cvspserver      2401/udp                        # CVS client/server operations

[root@ns /root]# killall -1 inetd



CVS 서버측 설정(ns.dbakorea.pe.kr)
kang이라는 사용자를 프로젝트매니저(?)로 하고, 차후에 추가될 사용자를 위해
cvs라는 그룹도 같이 만들자. 여기서는 kang만이 쓰기 권한을 가진다.

[kang@ns kang]$ mkdir cvstest
[kang@ns kang]$ cd cvstest
[kang@ns cvstest]$ cat > README
CVS테스트
CVS는 공동작업시 유용한 툴입니다.

[kang@ns cvstest]$ cat > hello.c
int main()
{
        printf("Hello1 ");  
}

[kang@ns cvstest]$ su -
Password:
[root@ns /root]# groupadd cvs
[root@ns /root]# usermod -G cvs kang
[root@ns /root]# mkdir /home/cvs
[root@ns /root]# chown kang:cvs /home/cvs
[root@ns /root]# exit
logout
[kang@ns cvstest]$ cvs -d /home/cvs init


프로젝트 생성

메시지:     CVS테스트
프로젝트명: cvstest
Vendor:     DBAKOREA
release:    start

[kang@ns cvstest]$ cvs -d /home/cvs import -m "CVS 테스트" cvstest DBAKOREA start
N cvstest/README
N cvstest/hello.c

No conflicts created by this import

[kang@ns cvstest]$ l /home/cvs
total 2
drwxrwxr-x    3 kang     kang         1024  4월 26 11:54 CVSROOT/
drwxrwxr-x    2 kang     kang         1024  4월 26 11:56 cvstest/
[kang@ns cvstest]$ l /home/cvs/cvstest/
total 2
-r--r--r--    1 kang     kang          421  4월 26 11:56 README,v
-r--r--r--    1 kang     kang          414  4월 26 11:56 hello.c,v
[kang@ns cvstest]$ su -
Password:
[root@ns /root]# chown -R kang:cvs /home/cvs
[root@ns /root]# exit
logout
[kang@ns cvstest]$



클라이언트측 설정(서버와는 물리적으로 다른 컴퓨터)

[maddog@tiger /main]$ cvs -d ':pserver:kang@dbakorea.pe.kr:/home/cvs' login
(Logging in to kang@dbakorea.pe.kr)
CVS password:
[maddog@tiger /main]$ cvs -d ':pserver:kang@dbakorea.pe.kr:/home/cvs' checkout cvstest
-f server: Updating cvstest
U cvstest/README
U cvstest/hello.c
[maddog@tiger /main]$ cd cvstest
[maddog@tiger cvstest]$ l
total 12
drwxr-xr-x    2 maddog   smsdev       4096 Apr 26 11:50 CVS/
-rw-r--r--    1 maddog   smsdev         44 Apr 26 11:56 README
-rw-r--r--    1 maddog   smsdev         36 Apr 26 11:56 hello.c
[maddog@tiger cvstest]$ cvs -d ':pserver:kang@dbakorea.pe.kr:/home/cvs' logout
(Logging out of kang@dbakorea.pe.kr)

환경변수 CVSROOT를 사용하면 cvs에서 -d로 일일이 CVSROOT를 지정할 필요가 없다.
[maddog@tiger cvstest]$ export CVSROOT=':pserver:kang@dbakorea.pe.kr:/home/cvs'
[maddog@tiger cvstest]$ cvs login
(Logging in to kang@dbakorea.pe.kr)
CVS password:
[maddog@tiger cvstest]$



CVS 활용
hello.c를 다음과 같이 수정하고 서버에 반영하자.

파일변경
[maddog@tiger cvstest]$ cat hello.c
int main()
{
        printf("Hello1 ");
        printf("Hello2 ");
}
[maddog@tiger cvstest]$ cvs commit -m "Hello2 추가" hello.c
Checking in hello.c;
/home/cvs/cvstest/hello.c,v  <--  hello.c
new revision: 1.2; previous revision: 1.1
done

파일 추가
[maddog@tiger cvstest]$ cat hello2.c
int main()
{
        printf("haha ");
}
[maddog@tiger cvstest]$ cvs update
-f server: Updating .
A hello2.c
[maddog@tiger cvstest]$ cvs commit -m "hello2.c추가" hello2.c
RCS file: /home/cvs/cvstest/hello2.c,v
done
Checking in hello2.c;
/home/cvs/cvstest/hello2.c,v  <--  hello2.c
initial revision: 1.1
done

파일삭제
[maddog@tiger cvstest]$ rm hello2.c
rm: remove `hello2.c'? y
[maddog@tiger cvstest]$ cvs delete hello2.c
-f server: scheduling `hello2.c' for removal
-f server: use '-f commit' to remove this file permanently
[maddog@tiger cvstest]$ cvs update
-f server: Updating .
R hello2.c
[maddog@tiger cvstest]$ cvs commit -m "hello2.c삭제" hello2.c
Removing hello2.c;
/home/cvs/cvstest/hello2.c,v  <--  hello2.c
new revision: delete; previous revision: 1.1
done

변경기록 보기
[maddog@tiger cvstest]$ cvs log hello.c

RCS file: /home/cvs/cvstest/hello.c,v
Working file: hello.c
head: 1.2
branch:
locks: strict
access list:
symbolic names:
        start: 1.1.1.1
        DBAKOREA: 1.1.1
keyword substitution: kv
total revisions: 3;     selected revisions: 3
description:
----------------------------
revision 1.2
date: 2001/04/26 03:11:54;  author: kang;  state: Exp;  lines: +1 -0
Hello2 추가
----------------------------
revision 1.1
date: 2001/04/26 02:56:14;  author: kang;  state: Exp;
branches:  1.1.1;
Initial revision
----------------------------
revision 1.1.1.1
date: 2001/04/26 02:56:14;  author: kang;  state: Exp;  lines: +0 -0
CVS 테스트
=============================================================================

추가사항(2001년 12월 6일)
CVSROOT변수의 lifetime
CVSROOT변수는 최초 로그인과 checkout(co)시에만 필요하다.
checkup시 생성되는 CVS디렉토리에 사용자 계정정보가 저장되기 때문에
다음부터는 CVSROOT변수를 설정할 필요없이 checkout으로 생성된 디렉토리로 이동하여
cvs login명령을 사용하면 된다.

전송시 압축옵션
네트웍상태가 느리다면 -z옵션을 사용하여 압축전송을 할 수 있다.
cvs -z5 co test

파일추가: cvs add 파일명           (commit필요)
디렉토리추가: cvs add 디렉토리명   (commit불필요)

cvs update시 플래그 설명
U: 새로운 파일이 로컬 repository에 생성됨
A: 추가를 위해 스케줄링됨(commit시 repository에 추가됨)
R: 삭제를 위해 스케줄링됨(commit시 repository에 삭제됨)
M: 나에 의해 수정된 파일을 의미
C: 충돌난 파일을 의미(수동으로 조정을 해야 함)

필요한 사항이 있으면 계속 추가할 예정

This article comes from dbakorea.pe.kr (Leave this line as is)

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,017 명
  • 현재 강좌수 :  35,690 개
  • 현재 접속자 :  267 명