1 / 30

RCS 와 CVS 로 소스 관리

2004 Fall. RCS 와 CVS 로 소스 관리. 주 홍 택 컴퓨터공학과 계명대학교. 2004 Fall. RCS. 주 홍 택 컴퓨터공학과 계명대학교. 도입. 소프트웨어는 공동작업을 통하여 개발이 되고 발전하며 새로운 용도로 이용되기도 함 RCS(Revision Control System: 버전 관리 시스템 ) 은 유닉스에서 프로그램 개발을 돕는 소스 관리 도구임 대형 프로젝트 수행 시 반드시 필요한 도구임 여러 개발자가 프로젝트 수행 시 도움을 줌 소스 이력 관리 동시에 소스 수정을 방지함

Download Presentation

RCS 와 CVS 로 소스 관리

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2004 Fall RCS와 CVS로 소스 관리 주 홍 택 컴퓨터공학과 계명대학교

  2. 2004 Fall RCS 주 홍 택 컴퓨터공학과 계명대학교

  3. 도입 • 소프트웨어는 공동작업을 통하여 개발이 되고 발전하며 새로운 용도로 이용되기도 함 • RCS(Revision Control System:버전 관리 시스템)은 유닉스에서 프로그램 개발을 돕는 소스 관리 도구임 • 대형 프로젝트 수행 시 반드시 필요한 도구임 • 여러 개발자가 프로젝트 수행 시 도움을 줌 • 소스 이력 관리 • 동시에 소스 수정을 방지함 • 다른 방향으로 진행된 개발 결과를 합칠 수 있음 • 변경 내용을 추적할 수 있음 • 자동으로 생성되는 것은 관리하지 않음

  4. 버전 트리 • 하나의 파일을 트리 구조로 버전을 관리함 • 각 버전은 버전 번호를 가짐 • Release Revision branch • 새로운 분기점 가능 • 새로운 시도, 새로운 시스템에 포팅등 • 두개의 버전을 통합하기 위하여 rcsmerge를 사용함 root(1.1) trunk(1.2) trunk(1.3) branch(1.3.1.1) trunk(1.4) branch(1.3.1.2) tip(1.5) tip(1.3.1.3)

  5. 기본적인 동작: ci , co Check out Sources Check in Check out Check out Check in Check in

  6. 기본적인 동작: ci (Check in) • 소스 파일 관리를 시작하거나 새로운 버전을 만듬 • 원래의 소스 파일을 지우고 버전 관리를 위한 새로운 파일을 생성함 • 예: source.c  source.c,v • 수정을 위하여는 추후에 co 명령어를 사용함 • 이력 관리를 위하여 설명문을 입력함 • check in을 소스에 대한 잠금 해제(release lock)로 해석되기도 함 • 이후 부터 다른 사람도 소스를 수정할 수 있음 • 수정 내용 없이 check in 하면 소스 파일만 지우는 효과를 가져 옴

  7. 기본적인 동작: co (Check out) • 소스 파일 사용하기 위하여 가져옴 • 기본적으로 가장 최근의 파일을 가져옴 • source.c,v  source.c • check out을 소스에 대한 잠금 설정(set lock)로 해석되기도 함 • 이후에는 다른 사람은 수정을 위한 check out을 수행할 수 없음 • 파일을 수정하기 위한 것과 파일을 읽기 용도를 분명히 구분할 것 • 누가 특정 파일을 check out 했는지 알아 볼 수 있음

  8. 기본적인 동작: 예

  9. RCS 디렉토리와 파일 • Check in과 check out을 실행하기 전에 항상 RCS라는 디렉토리가 존재하는지 확인을 함. • 만약 존재한다면 이 디렉토리를 파일을 보관하기 위한 용도로 사용함 • RCS는 파일 별로 관리를 위한 rcs 파일을 생성(확장자 ,v)를 붙임 • rcs 파일은 파일 내용과 함께 파일에 대한 세부 사항, 전체 경로, 현재 버전, 접근할 수 있는 사용자 리스트, 파일의 시간과 날자에 관한 정보를 보관 • 버전이 증가함에 따라서 파일의 크기가 커짐 • 필요에 따라서 특정 버전을 삭제할 수 있음 • rcs –orange filename • 특정 버전을 삭제하여도 버전 번호는 유지됨

  10. 버전로그 • rlog

  11. 문자 식별 • 소스 파일에 특정 문자열(마커)을 삽입하면 RCS는 이 문자열에 소스 관리에 대한 정보를 추가함 • 예 $Header$  $Header : /Home/juht/temp/test, v 1.3 2003/11/16 03:28:30 juht Exp $ • 일반적으로 마커는 소스의 주석 안에 놓음 • 특정 변수에 저장할 수도 있음 • 프로그램 실행시 소스 버전 출력 가능 • 컴파일된 오브젝트 코드에서 소스 버전 확인 가능(ident) • 그외 유용한 마커: $Author$, $Date$, $Locker$, $Revision$, $Source$, $State$

  12. 파일 잠금 모드 • Strict Access 모드 • 기본적인 소스 잠금 모드 임 • 모든 개발자는 소스 파일을 check out 한 후에 수정할 수 있음 • 다른 사람이 check out한 소스 파일을 수정을 할 수 없음 • Open Access 모드 • rcs –U filename 과 rcs –L filename으로 Strict Access 모드에서 빠져 나오거나 다시 돌아 갈 수 있음 • 이 모드에서는 파일의 소유자만 수정을 위한 check out 없이 rcs 파일 수정이 가능함 • co 명령시 –l 옵션을 사용하지 않음 • 두 사람이 동시에 파일을 수정할 수 있음

  13. Check in에 대하여 • Check in을 실패하는 경우 두가지 • Strict Access 방식에서 check out 할 때 파일에 잠금을 설정하지 않고 소스를 수정함 • Open Access 방식에서 소유자 이외의 다른 개발자가 소스 파일에 잠금을 설정한 경우 • 다른 개발자가 잠금을 설정하지 않은 경우이면 파일의 잠금을 실행할 수 있음 rcs –l filename • 이미 다른 개발자가 잠금을 설정한 경우이면 • 이전 버전에 대하여 잠금을 실행하고 이후에 합치는 작업을 실시함 • 잠금을 실행한 다른 개발자와 협상을 실시함 • Check in과 check out를 연속적으로 실행할 수 있음 ci –l filename

  14. 버전 번호와 이름 관리 • Check in시 –r 옵션을 사용하여 새로운 버전 번호를 할당 할 수 있음 • 많은 발전을 하여 새로운 Release를 만드는 경우등 • Check out시에도 –r 옵션을 사용하여 오래된 버전을 가져 올 수 있음 • 다양한 이유가 존재함 • 특정 버전에 버전 번호 대신에 버전 이름을 사용할 수 있음 • rcs –nname:revision filename • ci –nrevision filename • 하나의 버전에 여러 개 이름 설정 가능

  15. 접근 리스트(Access Control List) • rcs 소스 파일에 대한 권한 • 파일의 소유자는 자신의 파일을 항상 읽을 수 있고 수정 가능 • 슈퍼 유저는 모든 파일을 읽고 쓸 수 있음 • 접근 리스트에 아무도 없으면 누구나 파일을 읽고 쓸 수 있음 • 접근 리스트가 비어 있지 않으면 리스트에 있은 개자만 파일에 대하여 잠금을 설정할 수 있음 • Rcs 명령의 –a 명령어를 사용하여 접근 리스트에 개발자를 추가하고 –e로 삭제할 수 있음

  16. 2004 Fall CVS 주 홍 택 컴퓨터공학과 계명대학교

  17. 도입 • 각종 파일의 버젼을 쉽게 관리할 수 있도록 도와주는 도구임 • 소프트웨어 개발 단계 별로 소스를 저장할 수 있음 • 개발이 진행된 후 예전 버전을 다시 볼 수 있음 • 작업한 내용을 글로 적어 함께 저장 • 각 버전 별로 소스의 변경 내용만 저장함: 공간 절약 • 여러 개발자가 하나의 프로젝트를 진행하는데 유용함 • 수정 예약 방식을 사용하지 않음 잠금 설정 없음 • 여러 개발자가 같은 파일을 동시에 수정할 수 있음 • 서로 다른 부분을 고치면 쉽게 합칠 수 있는 방법 제공 • 같은 부분을 고치면 수정한 사람들이 협상하여 함 • 대다수의 공개 프로젝트에서 사용되어 그 효능을 입증하였음 • Unix 환경은 물론, Windows나 Macintosh에서도 사용

  18. 동작 방식 • 저장소 • 공동으로 작업하는 파일 및 버전에 관한 정보를 중앙에서 보관하는 장소 • 디렉토리에 전반적인 설정 사항과 각 프로젝트의 파일들(문서, 프로그램 등)은 물론, 각 파일의 버젼 관리에 필요한 정보, 파일별 작업 기록들을 저장 • 프로젝트 • 여러 개의 프로젝트가 하나의 저장소를 공유할 수 있음 • 시작시 파일 및 기본 디렉토리 구조를 자신의 작업 디렉토리에 만들고, 이를 저장소로 옮김 • 프로젝트 진행 • 저장소에 있는 내용을 복사하여 자신의 작업 디렉토리를 만듬 • 작업 결과를 저장소로 옮기고, 다른 사람이 저장소에 올려 놓은 작업 결과를 받아오는 오면서 자신의 디렉토리에서 소프트웨어 개발을 실시함

  19. 작업 흐름도

  20. CVS 저장소 설정: CVS 서버 설치 • 저장소를 이용할 프로젝트들의 규모를 고려하여 충분한 공간 마련 • 저장소를 /home/cvs에 만들기로 했다면 다음과 같이 초기화할 수 있음 # cvs -d /home/cvs init • -d는 저장소의 위치 • init가 CVS 명령 • CVSROOT 디렉토리가 생성됨 • CVS의 각종 설정 내용을 담고 있는 디렉토리임 • CVS를 이용할 개발자들에게 저장소를 사용할 수 있는 권한을 부여

  21. 명령어 기본 • 기본 명령어 형식 $ cvs [cvs 옵션] 명령 [명령 옵션과 인자] • 모든 CVS 명령은 저장소의 위치를 알아야 수행됨 • 환경변수 CVSROOT 의 값으로 저장소의 위치 지정 • 또는 명령어 마다 –d 옵션 사용 • 시스템 인증 또는 CVS 서버 인증 과정이 모든 명령어 사용에 앞서 이루어져야 함 cvs -d :pserver:minskim@cvs.webdox.or.kr:/home/cvs login

  22. 프로젝트 생성 • 프로젝트의 이름을 결정 • 저장소에 새 프로젝트를 만들고 이 두 파일을 저장하기 위해서는 import 명령을 사용한다 • $ cvs import -m “msg" pname vender_tag release_tag • msg: 프로젝트 시작에 관한 메시지 • pname: 프로젝트 이름(디렉토리) • vender_tag: 일반적으로 프로젝트 생성자의 이름 • Release_tag: 프로젝트 생성시의 상태 • pname에 있는 모든 파일들이 CVS 저장소로 이동됨 • 이후에는 저장소에 저장된 것을 사용해야 함

  23. 프로젝트 시작 • 프로젝트에 참여해서 작업하려면 먼저 프로젝트 디렉토리명 (또는 모듈명) 을 알아야 함 • 작업할 프로젝트 디렉토리를 정했으면 cvs checkout 명령으로 저장소의 내용을 자신의 작업환경에 가져옴 cvs checkout directoryname • CVSROOT 도 다른 디렉토리와 마찬가지로 취급됨

  24. 소스 편집 • 보통 파일 편집하는 것과 다른 점이 없음 • 파일에 다음과 같은 RCS 지정자(마커)를 삽입하여 최근 수정일, 고친 사람, 개정판 번호 등의 정보를 알기 쉽게 함 • $Id$ • $Date$ • $Revision$ • $Log$

  25. 파일 추가 • 파일 이나 디렉토리 모두 동일한 방법으로 아래와 같이 CVS 저장소에 추가 bash$ mkdir newdir bash$ cvs add newdir bash$ cd newdir bash$ vi newfile.c bash$ cvs add newfiles.c bash$ cp ~/somewhere/img/test.gif . bash$ cvs add -kb test.gif bash$ cd .. bash$ cvs commit • 단, cvs commit 명령을 수행하기 전까지는 실제로 CVS 저장소에 저장되지 않음 • 문서가 아닌 이미지 같은 바이너리 파일 도 추가해서 CVS 저장소에 넣을 수 있는데 이때에는 반드시 -kb 옵션을 주어야 한다.

  26. 삭제 • 불필요한 파일 이나 디렉토리 를 CVS 저장소에서 삭제할 수 있음 bash$ rm newfile.c bash$ cvs remove newfile.c bash$ cvs commit • 추가와 마찬가지로 cvs commit 명령을 수행하기 전까지는 실제로 CVS 저장소에서 삭제하지 않음

  27. 충돌 해결 방법 • 개발자들 간에 update 하고 commit 하는 시간차이가 있어 변경된 내용이 서로 일치하지 않으면 commit 할때 충돌 (conflict) 이 일어남 • 충돌이 일어나면 해당 파일을 편집기로 열어 >>>>>>>> 부터 <<<<<<<< 사이의 충돌나는 부분을 편집한 후 다시 commit 을 시도 하면 됨. • 동일한 부분을 수정했으면 협상이 필요함

  28. Snapshot 생성 • 어느 한 시점에서의 프로젝트 파일들에 동일한 꼬리표 (TAG) 을 붙일 수 있음 bash$ cvs commit bash$ cvs tag REL_1_0 • 이것은 각각의 파일 들의 개정판 번호가 시간이 흐를수록 제각기 되기 때문에 특정 시점의 파일 들을 항상 동일하게 꺼낼 수 있게 해줌 • 예를 들어 A 라는 프로그램이 a.c, b.c, c.c 라는 소스 파일로 구성되어 있을때 현재의 파일 들에게 REL_1_0 이라는 꼬리표를 붙임 • REL_1_0 꼬리표를 사용해서 CVS 저장소로부터 꺼낸다. bash$ cvs co -rREL_1_0 prog_a bash$ cd prog_a

  29. Resources • Homepage and FAQ • http://www.cvshome.org • “Open Source Development with CVS” • 2nd Edition, ISBN: 1-58880-173-X • http://www.coriolis.com • Available online at http://library.books24x7.com • http://database.sarang.net/study/cvs/cvs-han/cvs-guide.html

  30. 질의 및 토의

More Related