버전관리와 wincvs

35
Company Logo HAJE @ 버버버버버 WinCVS www.themegallery.com

Upload: lucie

Post on 19-Mar-2016

63 views

Category:

Documents


0 download

DESCRIPTION

버전관리와 WinCVS. www.themegallery.com. CVS?. Concurrent Versions System 소프트웨어 프로젝트의 버전 관리를 도와준다 . RCS 를 기반으로 작성되어 있음 RCS 는 파일 단위의 버전 관리를 해줌 대표적인 사용 예 : WikiWiki. 참고 – 소프트웨어 프로젝트 관리의 3 요소. Unit test Build automation Version Control. 버전 관리란 ?. 버전이 뭔지는 알죠 ? - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 버전관리와  WinCVS

CompanyLogoHAJE

@

버전관리와 WinCVS

www.themegallery.com

Page 2: 버전관리와  WinCVS

HAJE in KAIST

CVS?

Concurrent Versions System 소프트웨어 프로젝트의 버전 관리를 도와준다 .

RCS 를 기반으로 작성되어 있음 RCS 는 파일 단위의 버전 관리를 해줌 대표적인 사용 예 : WikiWiki

Page 3: 버전관리와  WinCVS

HAJE in KAIST

참고 – 소프트웨어 프로젝트 관리의 3요소

Unit test

Build automation

Version Control

Page 4: 버전관리와  WinCVS

HAJE in KAIST

버전 관리란 ?

버전이 뭔지는 알죠 ?

어떤 파일이 언제 어떻게 누구에 의해 변경 /추가 되었는지를 알게 해준다 .

Branch, Milestone 관리에 용이 .

숙련된 개발자가 경험에 의존하던 프로젝트 자원 관리를 자동화 해줌 .

Page 5: 버전관리와  WinCVS

HAJE in KAIST

버전 관리의 장점 (1)

실수에 대한 복구가 쉬움 버전 관리 없는 프로젝트는 Backspace 키가

없는 키보드와 같다 팀원들의 co-work 를 돕는다 .

비단 프로그래머 뿐만 아니더라도 .. 프로젝트의 역사를 통째로 남길 수 있다 .

Ex: 2003 년 5 월 17 일에 release 한 제품에 버그가 보고되었는데 , 2002 년 12 월 11 일에는 분명히 이 버그가 없었다 . 이 두 버전간의 차이를 분석해 버그를 수정하였다 .

Page 6: 버전관리와  WinCVS

HAJE in KAIST

버전 관리의 장점 (2)

프로젝트의 “ 문맥 (context)” 를 쉽게 파악할 수 있게 해준다 . 나쁜 팀 프로젝트 습관

파일의 맨 앞에 history log 남기기 // modified by adaline 따위 붙이기 수정할 때 옛날 부분 주석처리 해서 남기기 등

버전관리 소프트웨어를 사용하면 이런 나쁜 습관을 없앨 수 있다 .

소스 파일에는 순수한 코드와 핵심적인 주석만 있어야 한다 .

Page 7: 버전관리와  WinCVS

HAJE in KAIST

구조

CVS 저장소 (Repository)

개발자 1

개발자 2

개발자 3

Page 8: 버전관리와  WinCVS

HAJE in KAIST

Repository

프로젝트의 모든 버전들의 원본이 담겨 있는 핵심 장소이다 .

자신의 컴퓨터 (local) 일 수도 있고 , 외부 컴퓨터로 지정할 수도 있음 .

하제의 경우 /home/cvs

많은 오픈 소스 프로젝트들이 CVS 를 통해 배포를 하고 있음

Page 9: 버전관리와  WinCVS

HAJE in KAIST

Project

어떤 소프트웨어를 이루는 자원 (= 파일 ) 의 집합 한 저장소는 여러 프로젝트를 담고 있을 수 있음

여러 파일과 폴더로 이루어짐 . 소스 코드 각종 리소스나 도큐먼트 테스트 데이터 등

Page 10: 버전관리와  WinCVS

HAJE in KAIST

시나리오 1

경돈이는 모 게임 회사에 취직해 프로젝트 “ α” 제작에 참여하게 되었다 . “α” 는 CVS 로 관리되고 있는 프로젝트이다 . 경돈이는 ‘ check out’ 을 하여 저장소의 프로젝트 파일들을 자신의 컴퓨터로 전송하였다 .

cvs –d … checkout alpha

Check out 이란 저장소의 파일을 자신의 컴퓨터로 통째로 가져오는 것을 말한다 . cf. VSS 의 check out

Page 11: 버전관리와  WinCVS

HAJE in KAIST

시나리오 2

경돈이가 아침에 출근을 해서 , 그 동안 다른 사람들이 그 동안 수정한 사항들을 자기 컴퓨터에 반영하고 싶어한다 .

cvs –d … update

Update 란 자신 컴퓨터에 있는 파일들을 저장소의 최신 파일들로 갱신하는 것을 말한다 .

Page 12: 버전관리와  WinCVS

HAJE in KAIST

시나리오 3

경돈이가 화랑의 발차기를 현재보다 2 배 느리게 하는 것이 좋겠다고 생각하여 hwoarang.cpp 파일을 수정한 후 , “commit” 을 하여 저장소의 파일을 갱신하였다 . 다른 팀원들이 update 를 하면 이 수정한 내용이 갱신될 것이다

cvs –d … commit hwoarang.cpp

Commit 이란 저장소의 최신 버전을 자신의 파일로 갱신하는 것을 말한다 .

Page 13: 버전관리와  WinCVS

HAJE in KAIST

Commit 할 때의 주의점

빌드가 깨지지 않게 할지어다

항상 충분한 테스트를 거칠지어다

Commit 할 때는 메시지를 남기도록 되어 있다 . 일종의 log 역할을 함 무엇을 했는지만 적지 말고 왜 했는지 적으시오

캐릭터 구조체에 가속도 필드를 추가 (x) 미끄러지는 효과가 필요했음 (o)

Page 14: 버전관리와  WinCVS

HAJE in KAIST

Hello.cpp

Revision 이란 각 파일의 버전을 말한다 . 시작과 동시에 모든 파일은 1.1 이라는 버전을

갖는다 .

void main(){

printf(“hello world\n”);}

Page 15: 버전관리와  WinCVS

HAJE in KAIST

Merge (1/3)

만약 두 사람이 같은 파일을 동시에 고치면 ?

경돈의 경우

#include <stdio.h>

void main(){

printf(“hello world\n”);}

세훈의 경우

int main(){

printf(“hello world\n”);return 0;

}

Page 16: 버전관리와  WinCVS

HAJE in KAIST

Merge (2/3)

1. 경돈이 자신의 수정본을 commit 함1. 성공 . 저장소의 버전은 1.2 가 됨 .

2. 세훈이 자신의 수정본을 commit 함1. 실패 . 저장소의 버전은 1.2 인데 자신이 편집한

파일은 1.1 이므로 Up-to-date check failure3. 세훈이 update 를 시도함

1. 성공적으로 Merge 됨 .4. 세훈이 Merge 된 파일에 이상이 없음을 확인하고

commit 함1. 성공 . 저장소의 버전은 1.3 이 됨 .

Page 17: 버전관리와  WinCVS

HAJE in KAIST

Merge (3/3)

CVS 는 optimistic lock scheme

Merge 된 파일#include <stdio.h>

int main(){

printf(“hello world\n”);return 0;

}

Page 18: 버전관리와  WinCVS

HAJE in KAIST

Confliction 이 일어나는 경우

<<<<<<< hello.cpp#include <stdio.h>=======#include <cstdio>>>>>>>> 1.2

int main(){

printf(“hello world\n”);return 0;

}

해결책 : 전화를 한다

Page 19: 버전관리와  WinCVS

HAJE in KAIST

WinCVS

cvs 커맨드는 다양하고 복잡 . WinCVS 는 GUI frontend 를 통해 CVS 를 윈도우에서 쉽게 사용할 수 있게 해주는 프로그램이다 .

자매품 : MacCVS, gCVS

Page 20: 버전관리와  WinCVS

HAJE in KAIST

설치 (1/2)

http://www.wincvs.org/download.html

Page 21: 버전관리와  WinCVS

HAJE in KAIST

설치 (2/2)

WinCVS 설치가 끝나면 CVSNT 를 설치할 것이냐고 물어봄 반드시 설치해야 함 !

WinCVS 를 제대로 사용하기 위해서는 Python 2.1 이상의 버전을 설치해야 한다

Page 22: 버전관리와  WinCVS

HAJE in KAIST

실행화면

Page 23: 버전관리와  WinCVS

HAJE in KAIST

새 프로젝트 만들기

새 프로젝트를 처음으로 만들 때 한번만 해준다 .

1. 작업중이던 프로젝트 메인 폴더 설정2. 메뉴의 Remote -> Import module

1. CVSROOT 설정2. 확인 버튼 누르면 끝 !

Page 24: 버전관리와  WinCVS

HAJE in KAIST

CVSROOT ???

저장소의 위치를 지정함

Page 25: 버전관리와  WinCVS

HAJE in KAIST

Check out

기존에 돌아가고 있는 프로젝트에 참여하고 싶을 때 . 메뉴의 Remote -> Check module

Page 26: 버전관리와  WinCVS

HAJE in KAIST

ex> Noah2k

Page 27: 버전관리와  WinCVS

HAJE in KAIST

히스토리 보기 파일을 오른쪽 버튼으로 클릭하고 Graph 를 선택해보자

Page 28: 버전관리와  WinCVS

HAJE in KAIST

Update update 하고자 하는 디렉토리 ( 혹은 개별 파일 )

에서 오른쪽 버튼을 누르고 Update 선택

Page 29: 버전관리와  WinCVS

HAJE in KAIST

Commit (1/2) 파일 수정 시 자동으로 인식해서 다음과 같이 나온다

Page 30: 버전관리와  WinCVS

HAJE in KAIST

Commit (2/2) 수정한 파일에서 오른쪽 버튼을 누르고 Commit 을 선택한다

폴더에서 하면 변경된 파일들이 모두 commit 됨 Revision 이 올라감 . (1.1 -> 1.2)

Page 31: 버전관리와  WinCVS

HAJE in KAIST

새 파일 추가 (1/2) 새로운 파일이 생기면 다음과 같이 나온다

Page 32: 버전관리와  WinCVS

HAJE in KAIST

새 파일 추가 (2/2) 파일을 선택하고 메뉴에서 Modify Add 선택

Page 33: 버전관리와  WinCVS

HAJE in KAIST

마치며 (1/3) 사용하는 IDE 가 버전 관리를 지원하면 적극

사용하자 (Visual Studio, Eclipse 등 )

Eclipse and CVS live together in perfect harmony

Page 34: 버전관리와  WinCVS

HAJE in KAIST

마치며 (2/3)

Branch, Tag 와 같은 멋진 기능이 많으니 必히 공부해 보자 .

Team project 를 하게 되는 경우 , 혹은 혼자 하는 project 라도 사용하면 매우 편리하다 .

프로그램 소스코드 뿐만 아니라 , 중요한 문서 등을 관리할 때에도 사용하면 좋다 .

동아리 방에 “ 실용주의 프로그래머를 위한 버전관리 using CVS” 책을 참고하자

Page 35: 버전관리와  WinCVS

HAJE in KAIST

마치며 (3/3)

참고할만한 자료

“ 실용주의 프로그래머를 위한 버전관리 using CVS” 동방에 있음 -_ -;

http://home.bawi.org/~minskim/moin.cgi/CVS%20 사용