· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
CVS/Tips

CVS 팁



1.1. CVSROOT 의 정확한 사용

CVSROOT 환경변수는 CVS 로 i/o 되는 파일의 위치를 지정하는 SHELL 환경변수이다. 그러나 CVSROOT 는 초기의 파일 import 나 checkout 에서 필요할뿐 이미 checkout 된 파일을 작업하는데는 필요하지 않다.

보통 CVSROOT 는 다음이 둘 중의 하나이다.

# echo $CVSROOT
/home/CVSROOT
#
이것은 파일의 저장이 로컬시스템에 이루어 질때이다. 이 경우는 별로 알아야할 내용이 없으므로 넘어간다.

# echo $CVSROOT
:ext:@devel.sds.co.kr:/home/CVSROOT
#
이 경우는 파일의 저장이 리모트시스템에 이루어 질때이다. 여기서 "ext" 는 리모트시스템임을 나타내며, "@devel.sds.co.kr" 은 서버의 주소를 "@" 앞에는 계정id 가 들어갈 수 있다. "/home/CVSROOT" 는 CVS 파일이 저장되는 저장소를 말한다. 현재의 옵션을 보면 "@"앞에 계정이 지정되어 있지 않으므로 현재 로그인된 계정으로 처리를 하게 된다.

CVSROOT 가 없더라도 처리를 할수 있는 경우가 있는데, 그 경우는 해당 디렉토리에 CVS 디렉토리가 존재하는 경우이다. CVS 디렉토리에 보면 Root 라는 파일이 있는데 내용을 확인해 보면 바로 CVSROOT 의 내용과 동일하다.

# echo CVS/Root
:ext:@devel.sds.co.kr:/home/CVSROOT
#

그외에 CVS 파일에는 Entries 와 Respository 파일이 있는데 리모트의 CVS 와 동기화 하는 파일이므로 임으로 편집하는것은 정신건강에 해롭다. --;;

리모트 CVS 시스템에 접근하려면 "CVS_RSH" 환경변수가 필요하다. 지정되지 않으면 rsh 를 이용하나 요즘에 rsh 접근을 허용하는 시스템은 없으므로 ssh 를 지정해 주어야 한다.

export CVS_RSH=ssh

모든 부분이 준비되었으면 CVS 를 시작하는 명령은?

# cvs import -m "CVS start" CVS_START CVS_START init

그러면 현재의 디렉토리 아래에 있는 모든 파일을 "CVS_START" 라는 프로젝트로 CVS 에 등록한다.

1.2. 삭제된 파일의 복구

더 이상 필요 없을것 같아서 삭제된 파일의 복구는 다시 add 로서 추가 시킨다. 파일이 현 디렉토리에 없을 경우에는 삭제되기 이전 버전의 파일을 떨어 뜨리면서 추가된다.

$ cvs add mail_view_origin.tpl
winchild@devel.sds.co.kr's password:
cvs add: Resurrecting file `mail_view_origin.tpl' from revision 1.1.
cvs add: Re-adding file `mail_view_origin.tpl' (in place of dead revision 1.2).
U mail_view_origin.tpl
cvs add: use 'cvs commit' to add this file permanently
#

즉 버전 1.1 파일을 떨어뜨리면서 add 가 된것을 보여 주고 있다. 그러면 필요한 대로 파일을 추가로 편집한 후에 commit 으로 추가한다.

# vi mail_view_origin.tpl
# cvs commit mail_view_origin.tpl
winchild@devel.sds.co.kr's password:
Checking in mail_view_origin.tpl;
/data/mailnara/webmail-v2.x/templates/templates/main/blue1/korean/mail/mail_view_origin.tpl,v  <--  mail_view_origin.tpl
new revision: 1.3; previous revision: 1.2
done
#

그러면 삭제 버전인 1.2 에서 1.3 으로 변경되면서 파일이 복구가 된다.



1.3. 구 버전 파일을 새 버전파일로

작업을 하다가 보면, 지금 진행중인 버전을 무시하고, 구 버전을 현재의 버전으로 대치하여 계속 작업을 해가야 할 상황이 발생하게 된다. log 를 확인해 보면 1.2 까지 진행된것을 확인할 수 있다.

$ cvs log testfile.php

RCS file: /data/CVSROOT/PJWKREPORT/testfile.php,v
Working file: testfile.php
head: 1.2
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 2;     selected revisions: 2
description:
----------------------------
revision 1.2
date: 2006/02/01 16:13:55;  author: winchild;  state: Exp;  lines: +2 -1
TEST2
----------------------------
revision 1.1
date: 2006/02/01 16:13:17;  author: winchild;  state: Exp;
테&#49853;.
=============================================================================

우선 리비전 1.1 의 파일을 얻어온다.

$ cvs update -r1.1 testfile.php
U testfile.php

상태를 확인해 보면 1.1 에서 Sticky Tag 가 걸린것을 확인해 볼수 있다.

$ cvs status testfile.php
===================================================================
File: testfile.php      Status: Locally Modified

   Working revision:    1.1     Wed Feb  1 16:14:06 2006
   Repository revision: 1.1     /data/CVSROOT/PJWKREPORT/testfile.php,v
   Sticky Tag:          1.1
   Sticky Date:         (none)
   Sticky Options:      (none)

우선 현재의 파일을 임시장소로 옮긴다.

$ mv testfile.php /tmp

그리고 현재의 버전 파일을 다시 받는다. 이때 스티키태그를 없애기 위해서 "-A" 옵션을 사용한다.

]$ cvs update -A testfile.php
cvs update: warning: testfile.php was lost
U testfile.php
[winchild@sdsmngr intranet]$ cvs status testfile.php
===================================================================
File: testfile.php      Status: Up-to-date

   Working revision:    1.2     Wed Feb  1 16:19:45 2006
   Repository revision: 1.2     /data/CVSROOT/PJWKREPORT/testfile.php,v
   Sticky Tag:          (none)
   Sticky Date:         (none)
   Sticky Options:      (none)

이렇게 해야 "commit" 에서 최신버전으로 커밋 되게 된다. 파일을 되돌려 놓고 (Overwrite) 필요한 부분을 수정한 후 커밋한다.

$ mv /tmp/testfile.php .
$ vi testfile.php
$ cvs commit testfile.php
Checking in testfile.php;
/data/CVSROOT/PJWKREPORT/testfile.php,v  <--  testfile.php
new revision: 1.3; previous revision: 1.2
done


1.4. CVS 로 데이터를 생성할 때 파일 퍼미션 문제

CVS 에서 데이터를 당겨올때에 다른 사람이 작성한 파일이 644 로 되어 있는 경우 갱신을 할수 없는 문제가 발생한다.

확인결과 CVS 의 옵션이 아닌 자신이 로그인한 계정의 umask 가 0022 일 경우에 CVS 에서 파일을 가져다 저장할경우에 644 로 저장되는 것을 확인 하였다. 따라서 기본적으로 자신의 계정이 umask 0002 로 설정되어야 한다. 원래의 계정만들때 default 는 0022 이다. 따라서 공동작업을 위해서는 umask 0002 를 .bash_profile 에 넣어 두어야 한다.

근본적으로는 /etc/skel/.bash_profile 에 넣어놓는것이 좋다. 그래야 계정을 생성할때 자동으로 생성이 되기 때문이다.

한가지 더 유의할것은 많은 사람들이 EditPlus 와 같은 FTP 기반의 편집툴을 사용하는 경우 PC 에서 작업한 파일이, FTP 로 전송되게 된다. 이경우 FTP 의 파일저장옵션도 default 로 0022 로 되어 있다. 이것도 바꾸어 줘야 한다. 이것은 vsftp 의 경우 /etc/vsftpd/vsftpd.conf 에서 umask 옵션을 002 로 바꾸어 주면 된다. (vsftpd.conf 에서 설정할경우 0002 가 아니라 002 임을 유의)


만약에 다른 사람이 umask 0022 로 작업해서 변경이 불가능할 경우, 파일을 삭제 (변경여부는 확인 - 삭제가 가능한것은 대개 해당디렉토리는 775 로 되어 있음) 하거나, root 로 파일퍼미션을 변경후 (파일 1-2 개의 경우) 작업을 하면 대체가 된다. 많은 파일을 변경해야 할 경우, find 명령을 이용하여 변경 할 수 있다.


이것은 패키지의 파일속성이나 디렉토리의 속성을 변경하는데 유용한것 으로 CVS 작업중에 하부 파일의 속성이 공동작업이 곤란하게 되어 있을 경우 이용할 수 있다.


현재의 디렉토리 아래의 모든 디렉토리의 access 모드를 775 로 변경하기.
 
# find . \( -type d -a -exec chmod 775 {} \; \)
현재의 디렉토리 아래의 .php 확장자의 파일의 access 모드를 664 로 변경하기.
# find . \( -name "*.php" -a -exec chmod 664 {} \; \)
현재의 디렉토리 아래의 .tpl 확장자의 파일의 access 모드를 664 로 변경하기.
# find . \( -name "*.tpl" -a -exec chmod 664 {} \; \)
-o (OR) 옵션에 의한 동시처리도 가능
# find . \( -type d -a -exec chmod 775 {} \; \) -o \( -name "*.php" -a -exec chmod 664 {} \; \)

See also CVS/FAQ

ID
Password
Join
Troglodytism does not necessarily imply a low cultural level.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2006-02-02 18:37:07
Processing time 0.0018 sec