Company Logo 버전관리와 WinCVS
HAJE in KAIST CVS? Concurrent Versions System 소프트웨어 프로젝트의 버전 관리를 도와준다. RCS 를 기반으로 작성되어 있음 RCS 는 파일 단위의 버전 관리를 해줌 대표적인 사용 예 : WikiWiki
HAJE in KAIST 참고 – 소프트웨어 프로젝트 관리의 3 요 소 Unit test Build automation Version Control
HAJE in KAIST 버전 관리란 ? 버전이 뭔지는 알죠 ? 어떤 파일이 언제 어떻게 누구에 의해 변경 / 추가 되 었는지를 알게 해준다. Branch, Milestone 관리에 용이. 숙련된 개발자가 경험에 의존하던 프로젝트 자원 관 리를 자동화 해줌.
HAJE in KAIST 버전 관리의 장점 (1) 실수에 대한 복구가 쉬움 버전 관리 없는 프로젝트는 Backspace 키가 없는 키보드와 같다 팀원들의 co-work 를 돕는다. 비단 프로그래머 뿐만 아니더라도.. 프로젝트의 역사를 통째로 남길 수 있다. Ex: 2003 년 5 월 17 일에 release 한 제품에 버그 가 보고되었는데, 2002 년 12 월 11 일에는 분명히 이 버그가 없었다. 이 두 버전간의 차이를 분석해 버그를 수정하였다.
HAJE in KAIST 버전 관리의 장점 (2) 프로젝트의 “ 문맥 (context)” 를 쉽게 파악할 수 있게 해준다. 나쁜 팀 프로젝트 습관 파일의 맨 앞에 history log 남기기 // modified by adaline 따위 붙이기 수정할 때 옛날 부분 주석처리 해서 남기기 등 버전관리 소프트웨어를 사용하면 이런 나쁜 습관 을 없앨 수 있다. 소스 파일에는 순수한 코드와 핵심적인 주석만 있어야 한다.
HAJE in KAIST 구조 CVS 저장소 (Repository) 개발자 1 개발자 2 개발자 3
HAJE in KAIST Repository 프로젝트의 모든 버전들의 원본이 담겨 있는 핵심 장 소이다. 자신의 컴퓨터 (local) 일 수도 있고, 외부 컴퓨터로 지 정할 수도 있음. 하제의 경우 /home/cvs 많은 오픈 소스 프로젝트들이 CVS 를 통해 배포를 하 고 있음
HAJE in KAIST Project 어떤 소프트웨어를 이루는 자원 (= 파일 ) 의 집합 한 저장소는 여러 프로젝트를 담고 있을 수 있음 여러 파일과 폴더로 이루어짐. 소스 코드 각종 리소스나 도큐먼트 테스트 데이터 등
HAJE in KAIST 시나리오 1 경돈이는 모 게임 회사에 취직해 프로젝트 “α” 제작 에 참여하게 되었다. “α” 는 CVS 로 관리되고 있는 프로젝트이다. 경돈이는 ‘check out’ 을 하여 저장소 의 프로젝트 파일들을 자신의 컴퓨터로 전송하였다. cvs –d … checkout alpha Check out 이란 저장소의 파일을 자신의 컴퓨터로 통째로 가져오는 것을 말한다. cf. VSS 의 check out
HAJE in KAIST 시나리오 2 경돈이가 아침에 출근을 해서, 그 동안 다른 사람들 이 그 동안 수정한 사항들을 자기 컴퓨터에 반영하고 싶어한다. cvs –d … update Update 란 자신 컴퓨터에 있는 파일들을 저장소의 최 신 파일들로 갱신하는 것을 말한다.
HAJE in KAIST 시나리오 3 경돈이가 화랑의 발차기를 현재보다 2 배 느리게 하는 것이 좋겠다고 생각하여 hwoarang.cpp 파일을 수 정한 후, “commit” 을 하여 저장소의 파일을 갱신하 였다. 다른 팀원들이 update 를 하면 이 수정한 내용 이 갱신될 것이다 cvs –d … commit hwoarang.cpp Commit 이란 저장소의 최신 버전을 자신의 파일로 갱신하는 것을 말한다.
HAJE in KAIST Commit 할 때의 주의점 빌드가 깨지지 않게 할지어다 항상 충분한 테스트를 거칠지어다 Commit 할 때는 메시지를 남기도록 되어 있다. 일종의 log 역할을 함 무엇을 했는지만 적지 말고 왜 했는지 적으시오 캐릭터 구조체에 가속도 필드를 추가 (x) 미끄러지는 효과가 필요했음 (o)
HAJE in KAIST Hello.cpp Revision 이란 각 파일의 버전을 말한다. 시작과 동시에 모든 파일은 1.1 이라는 버전을 갖는다. void main() { printf(“hello world\n”); }
HAJE in KAIST Merge (1/3) 만약 두 사람이 같은 파일을 동시에 고치면 ? 경돈의 경우 #include void main() { printf(“hello world\n”); } 세훈의 경우 int main() { printf(“hello world\n”); return 0; }
HAJE in KAIST Merge (2/3) 1. 경돈이 자신의 수정본을 commit 함 1. 성공. 저장소의 버전은 1.2 가 됨. 2. 세훈이 자신의 수정본을 commit 함 1. 실패. 저장소의 버전은 1.2 인데 자신이 편집한 파일은 1.1 이므로 Up-to-date check failure 3. 세훈이 update 를 시도함 1. 성공적으로 Merge 됨. 4. 세훈이 Merge 된 파일에 이상이 없음을 확인하고 commit 함 1. 성공. 저장소의 버전은 1.3 이 됨.
HAJE in KAIST Merge (3/3) CVS 는 optimistic lock scheme Merge 된 파일 #include int main() { printf(“hello world\n”); return 0; }
HAJE in KAIST Confliction 이 일어나는 경우 <<<<<<< hello.cpp #include ======= #include >>>>>>> 1.2 int main() { printf(“hello world\n”); return 0; } 해결책 : 전화를 한다
HAJE in KAIST WinCVS cvs 커맨드는 다양하고 복잡. WinCVS 는 GUI frontend 를 통해 CVS 를 윈도우에 서 쉽게 사용할 수 있게 해주는 프로그램이다. 자매품 : MacCVS, gCVS
HAJE in KAIST 설치 (1/2)
HAJE in KAIST 설치 (2/2) WinCVS 설치가 끝나면 CVSNT 를 설치할 것이냐고 물어봄 반드시 설치해야 함 ! WinCVS 를 제대로 사용하기 위해서는 Python 2.1 이상의 버전을 설치해야 한다
HAJE in KAIST 실행화면
HAJE in KAIST 새 프로젝트 만들기 새 프로젝트를 처음으로 만들 때 한번만 해준다. 1. 작업중이던 프로젝트 메인 폴더 설정 2. 메뉴의 Remote -> Import module 1. CVSROOT 설정 2. 확인 버튼 누르면 끝 !
HAJE in KAIST CVSROOT ??? 저장소의 위치를 지정함
HAJE in KAIST Check out 기존에 돌아가고 있는 프로젝트에 참여하고 싶을 때. 메뉴의 Remote -> Check module
HAJE in KAIST ex> Noah2k
HAJE in KAIST 히스토리 보기 파일을 오른쪽 버튼으로 클릭하고 Graph 를 선택해 보자
HAJE in KAIST Update update 하고자 하는 디렉토리 ( 혹은 개별 파일 ) 에서 오른쪽 버튼을 누르고 Update 선택
HAJE in KAIST Commit (1/2) 파일 수정 시 자동으로 인식해서 다음과 같이 나온다
HAJE in KAIST Commit (2/2) 수정한 파일에서 오른쪽 버튼을 누르고 Commit 을 선택한다 폴더에서 하면 변경된 파일들이 모두 commit 됨 Revision 이 올라감. (1.1 -> 1.2)
HAJE in KAIST 새 파일 추가 (1/2) 새로운 파일이 생기면 다음과 같이 나온다
HAJE in KAIST 새 파일 추가 (2/2) 파일을 선택하고 메뉴에서 Modify Add 선택
HAJE in KAIST 마치며 (1/3) 사용하는 IDE 가 버전 관리를 지원하면 적극 사용하 자 (Visual Studio, Eclipse 등 ) Eclipse and CVS live together in perfect harmony
HAJE in KAIST 마치며 (2/3) Branch, Tag 와 같은 멋진 기능이 많으니 必히 공부 해 보자. Team project 를 하게 되는 경우, 혹은 혼자 하는 project 라도 사용하면 매우 편리하다. 프로그램 소스코드 뿐만 아니라, 중요한 문서 등을 관리할 때에도 사용하면 좋다. 동아리 방에 “ 실용주의 프로그래머를 위한 버전관리 using CVS” 책을 참고하자
HAJE in KAIST 마치며 (3/3) 참고할만한 자료 “ 실용주의 프로그래머를 위한 버전관리 using CVS” 동방에 있음 -_ -; 사용