CVS for Project management
description
Transcript of CVS for Project management
What is CVS?• CVS : the Concurrent Version System
• 각종 파일의 버전을 쉽게 관리할 수 있도록 도와주는 도구– 매 단계마다 파일관리– 백업 & 버그 수정 용이
• 공동 프로젝트 에서 파일 관리– 여럿이서 공동 작업 가능
동작 방식• 저장소 (Repository)
– 작업 파일들이 보관되는 공간– Directory managed by CVS
• Start a Project
개발자
저장소 개발자
checkout
동작방식 요약• 저장소 초기화
– CVS 설치시 1 번 .• 프로젝트 초기화
– 새로운 프로젝트 시작시 필요• 작업 공간 마련• 작업• 작업 내용을 저장소를 통해서 교류
저장소 설정• $ cvs –d /home/cvs init
– ‘init’ 은 cvs 명령어– /home/cvs/CVSROOT
• Cvs 의 각종 설정 내용
• /home/cvs 를 직접 건드리지 말것 !– Cvs 명령어 이용 !
• .bash_profile ( 저장소 위치 지정 )– CVSROOT=/home/cvs– export CVSROOT
System 계정 이용• 그룹 생성 후 개발자들을 추가
– Groupadd 로 그룹 생성– /etc/group 파일에서 사용자 등록
• Directory 에 권한 부여– $ chgrp –R cvs /home/kkhsoft/cvs– $ chmod –R g+w /home/kkhsoft/cvs
System 계정 없이 이용• System 계정 없이 이용하는 방법
– CVS 암호 인증 방식 이용– 개발자들은 CVS 계정을 부여 받으며 inetd 를
통해 정해진 포트로 CVS 를 사용
– 시스템 관리 측면에서 유리– 공개 프로젝트에서 주로 사용
• 아파치 , 모질라 등
inetd 설정• /etc/services
– cvspserver 2401/tcp – cvspserver 2401/udp
• /etc/inetd.conf– cvspserver stream tcp nowait root /usr/bin/cv
s cvs -f --allow-root=/home/cvs pserver
• $ killall -HUP inetd – Inetd 재시작
개발자 관리• $ htpasswd -n test
– ID:encrypt_passwd • test:f9HKoh.qN/Dz2
• Passwd file 위치– /home/cvs/CVSROOT/passwd – ID:encrypt_passwd:REAL_ACCOUNT
• test:f9HKoh.qN/Dz2:cvs
Readers, Writers• /home/cvs/CVSROOT/
• readers : 읽기 권한만 가진 개발자
• writers : 읽기 & 쓰기 권한 모두 가진 개발자
• Just add user ID in reader or writer file.
프로젝트 초기화• Directory 구조 설계
• 해당 소스가 있는 Directory 로 이동 후 소스들을 CVS 로 보낸다 .– $ cvs import –m "myprj" khpro kkhsoft start– N khpro/hello.c– No conflicts created by this import
Start a Project• System 에 계정 있을 경우
– $ cvs -d /home/cvs 명령
• System 에 계정 없을 경우– $ cvs -d :pserver:[email protected]:
/home/cvs login – $ cvs -d :pserver:[email protected]:
/home/cvs 명령
Checkout• Checkout
– $ cvs checkout khpro– cvs checkout: Updating khpro– U khpro/hello.c
Update• 저장소에서 다른 사람의 작업 결과를 받는 일
• $ cvs update– cvs update: Updating .
– “M 파일명” : 수정된 파일– “U 파일명” : 갱신된 파일
저장소me others
chekout chekout
commit
modify
updateM
Conflicts
• 개발자들 간에 update 하고 commit 하는 시간차이가 있어 변경된 내용이 서로 일치하지 않으면 commit 할때 충돌 (conflict) 이 일어난다 .
• 충돌이 일어나면 해당 파일을 편집기로 열어 >>>>>>>> 부터 <<<<<<<< 사이의 충돌나는 부분을 편집한 후 다시 commit 을 시도 하면 된다 .
저장소me others
chekout chekout
commit
modify
updateC
Add file• $ cvs add read.txt
– “read.txt” 를 추가한다는 것을 기록– 실제로 저장하려면 “ commit” 이용
Delete file• $ cvs delete read.txt
– “read.txt” 를 삭제한다는 것을 기록– 실제로 삭제하려면 “ commit” 이용
Tag #1• 프로그램이 2 개 이상의 소스를 가지고 있을 때
한 시점에서 소스들을 묶어 둘 수 있다 .• cvs tag 는 현재 작업 Directory 와 서브 Directory
에 있는 모든 파일들에 tag 를 붙인다 .
• cvs tag 태그명 파일명 • cvs tag 태그명
– 현재 작업 Directory 에 있는 모든 파일에 태그를 붙인다
Tag #2• cvs checkout -r 태그명 module 명
– Directory 를 새로 만든다 .• cvs update -r 태그명
• 작업중인 Directory 에서 checkout 이나 update를 하게되면 tag 가 있는 버전이 작업 Directory에 있는 파일들을 덮어 쓰게 된다 .
Branching #1• 현재 코드를 변경하지 않고 옛 버전의 코드에
있는 버그를 수정 .• 가지를 사용하면 메인 모듈에 영향을 주지 않고
메인 모듈의 다양한 버전을 저장하고 가져올 수 있다 .
• 가지 만들기– cvs tag -b branchtag 명
• 가지 가져오기– cvs checkout -r branchtag 명 module 명– cvs update -r branchtag 명
Branching #2• Branch 를 main 과 합치기
– cvs checkout module 명– cvs update -j branchtag 명
Make Patch• CVS 로 관리하는 코드에 대해서 특정 버전을
기준으로 한 패치를 작성한다 .
• cvs -z3 diff -u > file.diff
• 이 파일을 CVS 를 사용하지 않는 다른 사람들에게 전달하여 그들의 소스 코드를 패치하도록 할 수 있다 .
Subversion• 커밋 단위가 파일이 아니라 체인지셋 .• 파일별 리비전이 없고 한번 커밋할 때마다 변경
사항별로 리비전이 하나씩 증가• CVS 에 비해 엄청나게 빠른 업데이트 / 브랜칭 /
태깅 시간• CVS 와 거의 동일한 사용법• 파일 이름변경 , 이동 , 디렉토리 버전 관리도
지원• 여러개의 파일을 커밋하다 커밋이 실패하면 모두
이전 상태로 되돌아감
The End부족한 부분 많은데 끝까지 봐 주셔서 감사합니다 ^^