350 likes | 605 Views
버전관리와 WinCVS. www.themegallery.com. CVS?. Concurrent Versions System 소프트웨어 프로젝트의 버전 관리를 도와준다 . RCS 를 기반으로 작성되어 있음 RCS 는 파일 단위의 버전 관리를 해줌 대표적인 사용 예 : WikiWiki. 참고 – 소프트웨어 프로젝트 관리의 3 요소. Unit test Build automation Version Control. 버전 관리란 ?. 버전이 뭔지는 알죠 ?
E N D
버전관리와 WinCVS www.themegallery.com
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 <stdio.h> void main() { printf(“hello world\n”); } • 세훈의 경우 int main() { printf(“hello world\n”); return 0; } HAJE in KAIST
Merge (2/3) • 경돈이 자신의 수정본을 commit함 • 성공. 저장소의 버전은 1.2가 됨. • 세훈이 자신의 수정본을 commit함 • 실패. 저장소의 버전은 1.2인데 자신이 편집한 파일은 1.1이므로 Up-to-date check failure • 세훈이 update를 시도함 • 성공적으로 Merge 됨. • 세훈이 Merge된 파일에 이상이 없음을 확인하고 commit함 • 성공. 저장소의 버전은 1.3이 됨. HAJE in KAIST
Merge (3/3) • CVS는 optimistic lock scheme • Merge 된 파일 #include <stdio.h> int main() { printf(“hello world\n”); return 0; } HAJE in KAIST
Confliction이 일어나는 경우 <<<<<<< hello.cpp #include <stdio.h> ======= #include <cstdio> >>>>>>> 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) • http://www.wincvs.org/download.html HAJE in KAIST
설치 (2/2) • WinCVS 설치가 끝나면 CVSNT를 설치할 것이냐고 물어봄 반드시 설치해야 함! • WinCVS를 제대로 사용하기 위해서는 Python 2.1 이상의 버전을 설치해야 한다 HAJE in KAIST
실행화면 HAJE in KAIST
새 프로젝트 만들기 • 새 프로젝트를 처음으로 만들 때 한번만 해준다. • 작업중이던 프로젝트 메인 폴더 설정 • 메뉴의 Remote -> Import module • CVSROOT 설정 • 확인 버튼 누르면 끝! 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” • 동방에 있음 -_ -; • http://home.bawi.org/~minskim/moin.cgi/CVS%20사용 HAJE in KAIST