Concurrent Versions System (cvs)
Concurrent Versions System
박 다 은
2003년 6월 12일
3.2.1. Repository에 Project 생성 (저장소로 project올리기) 2
3.2.2. WorkSpace에 Project 생성 (저장소에서project받기) 2
1. CVS?
소프트웨어를 개발하는 과정에서 프로그래머는 다양한 버전의 소스코드를 관리해야할 필요가 있다. 예를 들어 버전 1.1이 나왔다고 하더라도 이전의 버전의 소스 코드를 가지고 있어야 한다.
그 이유는 소프트웨어의 기능 향상을 위해 소스 코드를 변경하거나 추가하는 과정은 항상 버그가 끼어들 위험을 동반하여, 현재 버전과 이전의 버전들 간의 비교나 이전 버전들 사이의 비교가 버그를 잡는데 있어서 반드시 필요하기 때문이다.
CVS는 개발 소프트웨어에 대한 버전을 관리하는 툴이다.
CVS는 아래의 개발자가 요구하는 사항에 대해 정보를 제공한다.
n 누가 코드를 수정했는가
n 언제 수정되었는가
n 동일시간에 벌어진 변화는 무엇인가
n 왜 수정되었는가(CVS 코멘트를 달수있는 기능을 가지고 있다)
1.1. CVS 용어정리
n repository : 소스가 저장되는 곳
n module : repository내에 존재하는 디렉토리 계층.
n import : 전체 디렉토리 구조를 전송함으로써 저장소에 새로운 모듈을 생성.
n export : repository에서 모듈을 가지고 오는 것.
( export된 모듈은 cvs 제어를 받지 않는다.)
n checkout : repository에서 모듈을 가지고 오며, cvs의 버전관리를 받는다
n update : 저장소로부터 다른 개발자들의 수정사항을 얻는 것
n commit : add나 delete, 자신이 변경한 부분을 repository에 반영하는 것.
n conflict : Race Condition(동시수정)이 발생하였을 때를 말한다.
소스에 표시가 되므로 conflict를 제거하고 테스트를 돌려 이상이
없음을 확인한 후 다시 commit 해야 한다.
n tag : 개발상의 특정 시점을 나타내는 파일들의 집합에 주어지는 문자열(명칭).
n release : 전체 프로젝트 버전
n revision : 한 개의 파일에 대한 버전명칭
1.2. CVS 기본컨셉
n revision number
각각의 파일들은 자신의 revision 번호를 가지며, 이 번호들은 파일이 수정될때마다
증가된 값을 가진다.
프로그램을 개발하다 보면 하나의 중심되는 개발 흐름이 있고, 이와는 별도로 작은 부분에 대한 개발 흐름이 존재한다.
n main trunk : 중심되는 개발 흐름
n branch
main trunk와는 다른 작은 부분에 대한 개발흐름
뻗어나온 main trunk의 revision번호에 숫자를 두자리 덧붙여서 사용
2. CVS SERVER
2.1. 설치전 요구사항
n 하드디스크의 파일시스템이 NTFS인지 확인한다.
(Windows NT, Windows 2000 및 Windows XP에서만 가능)
n CVSNT를 설치할 PC에 Administrator로 로그인 되어있어야 한다.
n 최신의 cvsNT 서버 인스톨을 다운로드 받는다. (http://www.cvsnt.org/)
n 프로젝트의 내용이 담길 디렉토리 (ex: c:\thursday)와
CVS서버내부적으로 사용하는 임시디렉토리(ex: c:\cvstemp)가진 디렉토리를 만든다.
2.2. 설치 및 설정
1. CVSNT설치후, CVS NT를 실행시킨다.
2. 서비스가 동작중인지 확인하고,동작중이면 stop 버튼을 눌러서 서비스를 멈춘다.
3. Repositories" 탭에서 "prefix" 옵션을 선택한후,
"..."이 적혀있는 버튼을 눌러 내용을 앞서 생성시킨 "c:/thursday"으로 설정한다.
Ø 주의사항: 모든 repository는 지정한 하나의 디렉토리 하위에 생성되어야한다.
(There is only one setting for Repository Prefix on CVSNT. )
4. Add 버튼을 선택하여 저장소(repository)를 추가한다.
(같은 서버내에 여러개의 저장소를 생성할 수 있다.)
5. Advanced 탭으로 가서 모든 채크박스를 채크상태로 설정한후,
temp 디렉토리를 설정한다.
6. 설정들을 저장한후, cvs service를 시작한다.
7. 설치 확인
: path에 c:program files/cvsnt를 확인한다.
8.
서버에 사용자 추가하기
Ø
cvs server에 접속하기 위한 초기설정
Ø
set cvsroot=:ntserver:<computer name>:/<cvsroot name>
Ø
set cvsroot=
:sspi:<computer name>:/<cvsroot name> -방화벽존재-
Ø
NT 계정으로 사용자를 하나 추가
Ø
cvs passwd -a <user>
Ø
cvs passwd -a
–
r <user> <id>
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
9. 사용자가 정상적으로 추가되었는지 테스트
Ø 사용자정보보기(각 repository마다 존재)
: Path: \root\repository_name\CVSROOT\passwd file 확인
ex) C:\Thursday\test\CVSROOT
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø CVS Client User Login
ü set cvsroot=:pserver:trickster@127.0.0.1:/test
: server ip와 프로토콜, repository명, userID로 CVS서버에 접속한다.
ü cvs login : cvs 로그인 명령어
ü cvs ls –l –R : repository내의 파일과 디렉토리를 보여주는 명령어
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
3. CVS CLIENT (JB9)
3.1.CVS CLIENT TOOL 용어정리
n Workspace : 개발자의 작업공간(JBuilder의 Project 단위)
n Checkout (pull): 저장소(repository)에서 모듈가지고오기
n Add : 모듈에 파일추가
n Remove : 저장소에 있는 파일삭제
n Update : 저장소에 있는 내용을 내작업공간에 반영
n Commit : 내작업공간의 내용을 저장소에 반영
n Merge : cvs는 파일에 대한 lock기능이 없기 때문에,
저장소에서의 변화된 부분과 자신의 작업공간에서의 변화된부분을 합병시킨다.
3.2.CVS PROJECT 생성
3.2.1. Repository에 Project 생성 (저장소로 project올리기)
1. Server Repository에 project 생성
:Team/select Project VCS à Team/Place Project into CVS
Ø Connect type
ü A Local connection : 로그인필요없음
ü A PServer connection : 서버이름과 서버의 사용자아이디필요
ü An Ext : 서버이름과 서버의 사용자아이디, ssh 필요
2. Local Repository에 project 생성
:Team/Create Local Repository
3.2.2. WorkSpace에 Project 생성 (저장소에서project받기)
Ø 방법1: Pull Project from CVS(File/New)
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø 방법2: Pull Project in CVS(Team/)
Ø
Ø
Ø
Ø
Ø
Ø
Ø (방법1 & 2 후) 공통 프레임
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø 가지고 오는 방식
Ø Checkout : jbuilder의 cvs 버전관리를 받는다.
Ø Export : 버전관리를 받지않는다.(일반 다운로드와 같은 형태)
3.3.Builder 9 CVS 기능
3.3.1. 전체구조
3.3.2. 기본기능
n SECTION 1
l Configure CVS : cvs server와 접속한 기본설정 정보를 보여준다.
l Update “file” : repository에 있는 file내용을 workspace에 반영한다.
l Commint “file” : file내용을 repository에 반영한다.
l Status for “file”: file의 현재 상태를 보여준다
l Add…: workspace에 file을 추가한다.
l Remove “file”: workspace에 file을 삭제한다.
l Revert “file” : 가장최근에 commit한 file상태로 전환한다.
n SECTION 2
l Update Project : repository내의 전체모듈(project)을 workspace로 반영한다.
l Status Browser : workspace내의 모든 파일들의 상태를 보여줌
l Commit Browser : repository내의 모듈과 workspace와 비교하여, 파일의
변경 상황을 알려 변경된 파일을 CVS 서버에 올릴 것인지 CVS 서버로부터 받아올
것인지 등을 결정한다
3.3.3. CVS ADMINISTRATION
n Jb9에 추가된 기능이며, tag와 branch로 버전관리를 돕는다.
n Cvs의 버전관리는 revision, label(tag)와 branch 정보로 이루어진다.
Ø Revision :
파일의 버전명칭: 각각의 파일들은 자신의 revision 번호를 가지며,
이 번호들은 파일이 수정될 때마다 증가된 값을 가진다.
Ø Label(Tag) :
파일의 현재 버전에 tag를 붙여 표시해두어, 사용한다.
책의 주요부분에 포스트 잇으로 표시해두는 개념과 흡사하다.
Ø Branch :
중심되는 개발 흐름이외의 다른 작은 부분에 대한 개발흐름
Ø
ü main revision : 1.3 -> 1.4 -> … -> 1.7
ü branch :
revision 1.4에서 brch(브랜치태그)를 붙인다.
Brch의 버전흐름 1.4.2.1-> .. -> 1.4.2.5
ü label(tag) : prg5 , prg6
ü label을 붙여줌으로써 좀더 편하게
이전의 상태을 찾을수있게 해준다.
ü Branch는 main revision, 또다른 branch에서
확장가능하며, 여러흐름의 개발을 하게 도와준다.
Ø JB 9기능
ü Create version label: 현재 revision(파일의 버전)에 라벨 붙이기
Workspace안의 모든 파일에 적용된다.
ü Delete version label : 붙여논 라벨 지우기
ü Move version label : file의 내용을 선택한 라벨의 상태로 되돌림
ü Update special : 날짜, branch, main revision, label을 선택하여
workspace의 내용을 선택한 상태로 되돌림
ü Merge : Update special과 흡사하나, merge의 경우
선택된 버전의 상태와 현재의 내용과 합한다.
ü Create Branch : branch 생성
3.3.4. LABEL(TAG) 관리
Ø Revision 1.6까지 버전업되는 과정에 Label ap1, ap2, ap3 생성후,
파일내용을 ap1 상태로 되돌림
Ø Untitled1.java의 버전 history들과 label들의 정보
Ø Update special(jb9 cvs tool)을 통해 변화된 소스내용
: 현재 파일내용(= revision 1.6 )에서 label ap1선택시
: Revision1.6 -> Revision1.2
Ø JB 9 admin tool 사용법
: Label(tag) 생성 & Update special : LABEL을 scan하여 선택
3.3.5. Branch 관리
Label과 같은 방식으로 update와 merge기능을 사용할 수 있다.
Main Trunk로 버전을 늘리지 않고, Branch로 버전을 계속 늘리고 싶다면
(ex) 1.4.1 -> 1.4.2 -> …), update special을 통해 확장하고자 하는 branch로 선택하여, 현재 workspace상태를 바꿔주어야 한다.
3.3.6. CVS WATCH
많은 버전관리 시스템과 달리 CVS는 파일 잠금을 지원하지 않기 때문에
CVS는 파일에 대해서 여러명이 연속적으로 편집하는 것을 막지 않는다.
파일들이 감시되고 있으면, 개발자는 편집을 위해서 cvs edit를 사용하고, 편집한 파일을 릴리스하기 위해서는 cvs unedit를 사용해야한다.
감시되지 않는 파일들은 CVS에게 알리지 않고 편집할 수 있다.
1. CVS Edit(편집모드)
감시되고있는 파일은 read-only로 permision이 바뀌기 때문에, 파일내용을 편집할수 없다.
따라서 read-write기능을 가지게 하려면, 다른 사람들에게 감시되고 있는 파일을 편집하겠다는 계획을 알려야 한다. cvs edit를 통해 수행된다.
2. CVS Unedit(편집불가 모드)
Cvs edit 명령이 수행된 후, 변화된 모든 부분을 없앤다.(CVS edit수행되기전 상태로 돌린다)
Unedit상태가 되면, 수정할수없게 된다.(jbuilder에서는 키보드의 키액션 자체가 일어나지 않음)
참조 싸이트 ----------------------------------------------------------------------------------------------------------------------
http://www.cvshome.org/docs/blandy.html
http://www.hta-bi.bfh.ch/Resources/Computing/SunGroup/Info/QuickRef/
VersionControl/doc/cvs_toc.html
http://kldp.org/KoreanDoc/html/CVS_Tutorial-KLDP/x45.html#AEN50
http://www.cvsnt.org/wiki/InstallationTips#head-311175d88e243efa70a083a2089337a7b53ddd77
http://www.redwiki.net/wiki/moin.cgi/WinCVS_20_2d_20Daily_20Use_20Guide
http://turing.korea.ac.kr/~iamone/cvs/x28.html
http://docs.kde.org/en/3.1/kdesdk/cervisia/watches.html
http://durak.org/cvswebsites/doc/cvs_92.php#SEC92