subversionhowto

Download Report

Transcript subversionhowto

subversion-HOWTO
소프트웨어 공학 도구 발표
2006.10.13
목차
 버전 관리 시스템과 그 필요성
 버전 관리 시스템의 용어들
 Subversion 설치
 Subversion 활용
 Subversion의 사용을 도와주는 유틸리티
 Subclipse
 Q&A
2
버전 관리 시스템과 그 필요성
 각종 사례
 혼자서 작업하는 경우
프로그램에 버그가 발견되어,
소스코드를 여기저기 마구잡이로 고치다가
사소한 오타 때문에 버그가 생겼음을 발견
오타를 제외하고 소스코드를 원래대로 되돌려야 함
(소스코드 변경 전에 백업을 안 했음)
→ 어디를 어떻게 바꾸어야 하는지 기억이 나지 않는다
3
버전 관리 시스템과 그 필요성
 여러 명이 작업하는 경우
A씨와 B씨가 같은 팀을 이루어 팀 프로젝트로 OS를 개발
프로그램의 성격상 모듈화가 어려우므로
같은 소스를 공유해서 작업을 하고 있다
A씨는 자신이 맡은 부분인 인터럽트 관련 소스코드인
irq.c 파일에 새로운 기능을 추가 하기 위해 열심히 코딩
B씨는 스케쥴링을 위한 코드를 작성하던 중에
인터럽트 관련 루틴을 손볼 일이 생겼다
A씨가 irq.c파일을 수정한다는 것을 모르고 irq.c파일을
열어 수정을 하다가 열어 놓은 채로 점심을 먹으러 감
4
버전 관리 시스템과 그 필요성
A씨는 점심 식사도 잊은 채 계속 새로운 기능 추가,
완료 후 irq.c파일을 저장하고 점심을 먹으러 감
점심을 먼저 먹고 돌아온 B씨는 irq.c에
자신이 필요한 기능을 마저 추가하고 저장
얼마 후 A씨가 돌아오고
다시 일을 하기 위해 irq.c파일을 열어본다
그러나…
5
버전 관리 시스템과 그 필요성
 앞에서 설명한 두 사례는 프로젝트를 진행하면서
흔히 겪는 일들이다
 프로젝트를 진행하면서 중간 파일들을 잘 백업해야 된다는
사실은 누구나 공감을 한다
→ 여간 번거로운 일이 아니다
(조금만 더 수정하고 백업해야지 하면서도 항상 뒤늦게 백업,
사고가 터지고 나서야 백업하지 않은 것을 후회)
6
버전 관리 시스템과 그 필요성
 백업을 자주하더라도 문제가 발생
-공간 낭비
- 프로젝트 파일의 사이즈가 작으면 상관이 없으나
사이즈가 크다면 매번 백업함으로써 공간이 낭비됨
-백업하는데 드는 시간
- 프로젝트 파일의 사이즈가 크면
전체 백업에 시간이 오래 걸림
- 작업 흐름을 끊어 놓을 정도로 시간이 오래 걸리면
문제가 될 수 있다
-백업한 파일들이 각각 어떠한 상황에서 백업했는지 알기 힘듦
-많은 백업 파일들을 관리하는 것 역시 힘들다
7
버전 관리 시스템과 그 필요성
 여러 명이 작업하는 경우 보다 심각한 문제 발생
 덮어쓰기 문제 발생
→ 프로젝트의 성격상 모듈화가 힘들어
하나의 소스를 공유해서 개발할 때 발생
 해결 방법 1
 하나의 파일에 대해서 한 사람만 수정하는 방법
 한 사람만 수정하게 된다면 작업능률이 극도로 저하되기 때문에
현실성이 없는 방법
 해결 방법 2
 프로젝트를 모듈화 시켜서 개발자들이 각자의 모듈만 작성하고
나중에 작성된 모듈을 합치는 방법
→ 모듈화가 가능한 프로젝트로 한정됨
 모듈화를 아무리 잘하더라도 다른 사람의 소스를 손 볼일은 생김
 테스트를 위해 전체 소스코드가 필요한 경우도 존재함
8
버전 관리 시스템과 그 필요성
 이러한 문제들
→ 버전 관리 시스템을 사용하면 한 번에 해결
 백업
 버전 관리 시스템을 사용하면 간단한 명령어로 쉽게 함
 전체 파일을 백업하는 것이 아니라, 바뀐 부분만 백업
→ 공간 절약, 각 소스들의 바뀐 부분을 알 수 있음
원한다면 특정 상태로 되돌리는 것도 가능
 여러 명이 하는 작업
 여러 사람이 하나의 소스를 공유하면서 작업하는 것이 가능
 앞에서 제기한 여러 문제들은 버전 관리 시스템이 떠맡고,
개발자들은 마치 혼자서 작업하는 것처럼 하나의 소스를 가지고 작업
 CVS, Subversion, Visual Soursesafe, Clear Case
SCCS, BitKepper
9
버전 관리 시스템과 그 필요성
 요약
 장점
 개발 버전과 릴리즈 버전을 섞이지 않고 쉽게 관리 할 수 있다
 소스를 잘못 수정했더라도 기록이 남고 되돌리기가 쉽다
(많은 파일일 경우 유용)
 수정, 추가, 삭제 등의 기록이 모두 남고
변경 사항을 추적하기 쉽다
 개발자들이 따로 따로 백업을 하지 않아도 된다
 단점
 배워야 한다
→ 개발자들이 버전 관리 시스템의 개념을 잘 이해하고
기능들을 잘 사용하여 효율적인 버전 관리가 되게 하려면
또 다시 새로운 것을 배워야 한다는 것 때문에 쉽게 접근하지
않으려는 경향이 있다
10
버전 관리 시스템의 용어들
 저장소 : 리포지토리(Repository)라고도 하며
- 모든 프로젝트의 프로그램 소스들은 이 저장소 안에 저장 됨
- 소스 뿐만 아니라 소스의 변경사항도 모두 저장 됨
- 네트워크를 통해서 여러 사람이 접근 가능
- 버전 관리 시스템 마다 각각 다른 파일 시스템을 가지고 있으며,
- Subversion은 Berkeley DB를 사용 (파일 시스템도 가능하다)
- 한 프로젝트마다 하나의 저장소가 필요
 체크아웃 : 저장소에서 소스및 버전 관리 파일들을 받아 오는 것
- 체크아웃에도 권한을 줄 수 있다
 커밋(Commit) : 체크아웃한 소스를 수정, 파일 추가, 삭제를 한 후에
저장소에 저장하여 갱신하는 것
- CVS의 경우 수정한 파일의 리비전이 증가하고,
Subversion의 경우 전체 리비전이 1증가하게 된다
11
버전 관리 시스템의 용어들
 업데이트 : 체크아웃을 해서 소스를 가져왔다 하더라도
다른 사람이 커밋을 하면 소스가 달라진다
- 이럴 경우 업데이트를 하여 저장소에 있는 최신 버전의 소스를 가져 옴
- 변경된 부분만 가져 옴
 리비전(Revision) : 소스 파일 등을 수정하여 커밋하게 되면
일정한 규칙에 의해 숫자가 증가한다
- Subversion의 경우 파일별로 리비전이 매겨지지 않고
한번 커밋으로 전체 리비전이 매겨진다
- 리비전을 보고 프로젝트 진행 상황을 알 수 있다
 임포트(Import) : 아무것도 들어있지 않은 저장소에
맨 처음 소스를 넣는 작업
 익스포트(Export) : 체크아웃과는 달리 버전 관리 파일들을 뺀
순수한 소스 파일을 받아올 수 있다
- 소스를 압축하여 릴리즈를 할 때 사용한다
12
버전 관리 시스템의 용어들
 저장소의 디렉토리 배치
저장소에 바로 넣을 수도 있지만, 버전 관리 시스템에서 권장하는 디렉토리 배치 방법
13
버전 관리 시스템의 용어들
 trunk : 단어 자체의 뜻은 본체 부분, 나무 줄기, 몸통 등이다
- 프로젝트에서 가장 중심이 되는 디렉토리
- 모든 프로그램 개발 작업은 trunk디렉토리에서 이루어 짐
- trunk디렉토리 아래에는 소스들의 파일과 디렉토리가 들어가게 됨
 branches : 나무 줄기(trunk)에서 뻗어 나온 나무 가지를 뜻함
- trunk디렉토리에서 개발하다 보면 큰 프로젝트에서 또 다른
작은 분류로 빼서 따로 개발해야 할 경우가 생김
- 프로젝트안의 작은 프로젝트라고 생각하면 됨
- branches 디렉토리 안에 또 다른 디렉토리를 두어 그 안에서 개발
 tags : 꼬리표라는 뜻
- 프로그램을 개발하면서 정기적으로 릴리즈를 할 때 0.1, 0.2, 1.0
하는 식으로 버전을 붙여 발표하게 되는데 그때그때 발표한 소스를
따로 저장하는 공간
- 위 그림에서, tags디렉토리 아래에
버전명으로 디렉토리가 만들어져 있음
14
Subversion 설치
 설치 환경
 펜티엄4 1.5GHz, 320MB RAM, 15GB HDD
 Ubuntu Linux 5.10 Breezy Badger, Kernel 2.6.12
 설치에 필요한 파일
 Subversion 소스파일
 Apache2 소스파일
 Berkeley DB 소스파일
 OpenSSL 소스파일
 모든 프로그램은 소스 파일들을 다운로드해서
컴파일하고 설치했다 (make, make install)
15
Subversion 설치




OpenSSL 컴파일과 설치
Berkeley DB 컴파일과 설치
Apache 컴파일과 설치
Subversion 컴파일과 설치
16
Subversion 설치




저장소 만들기
Apache 설정
에디터 설정
기본 디렉토리 만들기
17
Subversion 활용
 import
 맨 처음 프로젝트를 시작할 때 저장소에 소스를 넣는 작업
sampledir이라는 디렉토리 생성 후 간단한 소스 작성
 이 소스를 저장소의 trunk디렉토리에 import
 Import가 제대로 되었는지 확인
18
Subversion 활용
 checkout
 Checkout을 해서 어디서든 소스를 받아 볼 수 있다
(svn checkout은 svn co로 줄일 수 있다)
 Checkout을 한 디렉토리에는 .svn이라는 디렉토리가 있는데
저장소 정보가 들어있기 때문에 지우면 안됨
 update
 체크아웃해서 받은 소스를 저장소의 최근 내용으로 업데이트
(svn update는 svn up으로 줄일 수 있다)
19
Subversion 활용
 commit
 Checkout헤서 받은 소스를 수정하고, 저장소에 수정된 소스를 적용
 체크아웃 받은 sample.c소스를 아래처럼 수정
 커밋
(체크아웃해서 소스를 받은 디렉토리에서 실행,
svn commit은 svn ci로 줄여 쓸 수 있다)
커밋 로그 입력 후 저장
20
Subversion 활용
 log
 저장소에 어떤 것들이 변경되었는지 확인
 --revision은 -r과 동일
 하나의 파일이나 디렉토리의 로그도 볼 수 있다
21
Subversion 활용
 -v옵션은 더 자세한 정보를 얻을 수 있다
 A는 Add(추가) 표시
22
Subversion 활용
 diff
 예전 소스파일과 지금의 소스파일을 비교 가능
 앞의 로그에서 리비전 4에서 sample.c를 import
리비전 5에서 소스를 수정하고 커밋했음
 최초에 import했던 소스 sample.c의 리비전4와
수정해서 커밋한 리비전5의 차이점을 diff명령으로 출력
23
Subversion 활용
 리비전 4와 5를 비교하고 싶으면 –revision 4:5를 입력
(--revision 8:10과 같이도 가능)
24
Subversion 활용
 blame
 한 소스파일을 대상으로 각 리비전에 대해서 어떤 행을 누가 수정했는
지 알아보기 위한 명령
 여러 사람이 커밋했을 경우
 특정 리비전만 지정
25
Subversion 활용
 lock
 파일을 잠금
(왜 잠궜는지 로그 기록 가능,
파일을 잠그었을 경우 잠근 사용자만 수정을 해서 커밋 가능,
다른 사용자는 수정불가)
 add
 새 파일을 추가(추가 뒤에 커밋을 해야 저장소에 추가 됨)
26
Subversion 활용
 branch
 프로젝트중 작은 분류로 나누어 개발하거나,
소스를 따로 분리하여 실험적인 코드를 작성할 경우
 서브버전에서는 branch를 copy명령어로 수행
(trunk의 내용을 Branches안에 새로운 내용으로 복사)
 Branch된 소스를 받기 위해서는 branches/sample-branch를 체크아웃
27
Subversion 활용
 merge
 앞에서 trunk를 sample-branch로 브랜치했음
sample-branch를 수정하다가 trunk에도 반영하고 싶은 경우,
merge실행 (하나하나 소스코드를 옮겨 입력하지 않아도 된다!)
 파일 하나만 merge가능
28
Subversion 활용
 tag
 만든 프로그램을 공개할 때 사용
0.1버전을 발표할 때 0.1버전의 순간을 tags디렉토리에 복사
0.2가 되었을 때 tags아래 0.2디렉토리로 복사
→ 각각의 버전 별로 소스를 관리 할 수 있다
(저장소에서는 실제로 복사가 되는 것이 아니고 변경된 점만 복사하기 때문에
저장소의 용량이 소스코드의 크기만큼 배로 늘어나지는 않는다)
 0.1로 tag한 소스를 Export로 받아서 압축한 뒤에
공개(릴리즈)하면 된다
29
Subversion 활용
 revert
 merge를 했는데 잘못되었을 경우 되돌리는 명령
30
Subversion 활용
 dump
 저장소를 백업. 저장소의 내용을 파일로 생성
 load
 저장소 백업파일을 이용하여 저장소를 복구
31
Subversion의 사용을 도와주는 유틸리티
 GUI 클라이언트 프로그램
TortoiseSV
N
Ankhsvn
RapidSVN
32
Subversion의 사용을 도와주는 유틸리티
 웹 인터페이스
ViewCVS
WebSVN
33
Subclipse
 이클립스용 서브버전 플러그인
http://subclipse.tigris.org
 이클립스에서 서브버전의 기능들을 쉽게 사용할 수 있도록 도와줌
 서브버전은 JavaHL바인딩을 사용, JavaHL은 JNI를 사용해서
자바코드로부터 서브버전 라이브러리를 호출한다
34
Subclipse
 설치 과정
35
Subclipse
 설치 과정
36
Subclipse
 설치 과정
37
Subclipse
 설치 과정
38
Subclipse
 설치 과정
39
Subclipse
 설치 과정
40
Subclipse
 시연
41
Q&A
42