42
2006.10.13 소소소소소 소소 소소 소소 subversion-HOWTO subversion-HOWTO

2006.10.13

  • Upload
    argyle

  • View
    55

  • Download
    0

Embed Size (px)

DESCRIPTION

subversion-HOWTO. 소프트웨어 공학 도구 발표. 2006.10.13. 목차. 버전 관리 시스템과 그 필요성 버전 관리 시스템의 용어들 Subversion 설치 Subversion 활용 Subversion 의 사용을 도와주는 유틸리티 Subclipse Q&A. 버전 관리 시스템과 그 필요성. 각종 사례 - PowerPoint PPT Presentation

Citation preview

Page 1: 2006.10.13

2006.10.13

소프트웨어 공학 도구 발표

subversion-HOWTOsubversion-HOWTOsubversion-HOWTOsubversion-HOWTO

Page 2: 2006.10.13

2

버전 관리 시스템과 그 필요성

버전 관리 시스템의 용어들

Subversion 설치

Subversion 활용

Subversion 의 사용을 도와주는 유틸리티

Subclipse

Q&A

버전 관리 시스템과 그 필요성

버전 관리 시스템의 용어들

Subversion 설치

Subversion 활용

Subversion 의 사용을 도와주는 유틸리티

Subclipse

Q&A

목차목차 목차목차

Page 3: 2006.10.13

3

버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성 각종 사례

혼자서 작업하는 경우

프로그램에 버그가 발견되어 ,소스코드를 여기저기 마구잡이로 고치다가사소한 오타 때문에 버그가 생겼음을 발견

오타를 제외하고 소스코드를 원래대로 되돌려야 함( 소스코드 변경 전에 백업을 안 했음 )

→ 어디를 어떻게 바꾸어야 하는지 기억이 나지 않는다

각종 사례 혼자서 작업하는 경우

프로그램에 버그가 발견되어 ,소스코드를 여기저기 마구잡이로 고치다가사소한 오타 때문에 버그가 생겼음을 발견

오타를 제외하고 소스코드를 원래대로 되돌려야 함( 소스코드 변경 전에 백업을 안 했음 )

→ 어디를 어떻게 바꾸어야 하는지 기억이 나지 않는다

Page 4: 2006.10.13

4

버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성 여러 명이 작업하는 경우

A 씨와 B 씨가 같은 팀을 이루어 팀 프로젝트로 OS 를 개발

프로그램의 성격상 모듈화가 어려우므로같은 소스를 공유해서 작업을 하고 있다

A 씨는 자신이 맡은 부분인 인터럽트 관련 소스코드인irq.c 파일에 새로운 기능을 추가 하기 위해 열심히 코딩

B 씨는 스케쥴링을 위한 코드를 작성하던 중에인터럽트 관련 루틴을 손볼 일이 생겼다A 씨가 irq.c 파일을 수정한다는 것을 모르고 irq.c 파일을열어 수정을 하다가 열어 놓은 채로 점심을 먹으러 감

여러 명이 작업하는 경우

A 씨와 B 씨가 같은 팀을 이루어 팀 프로젝트로 OS 를 개발

프로그램의 성격상 모듈화가 어려우므로같은 소스를 공유해서 작업을 하고 있다

A 씨는 자신이 맡은 부분인 인터럽트 관련 소스코드인irq.c 파일에 새로운 기능을 추가 하기 위해 열심히 코딩

B 씨는 스케쥴링을 위한 코드를 작성하던 중에인터럽트 관련 루틴을 손볼 일이 생겼다A 씨가 irq.c 파일을 수정한다는 것을 모르고 irq.c 파일을열어 수정을 하다가 열어 놓은 채로 점심을 먹으러 감

Page 5: 2006.10.13

5

버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성A 씨는 점심 식사도 잊은 채 계속 새로운 기능 추가 ,완료 후 irq.c 파일을 저장하고 점심을 먹으러 감

점심을 먼저 먹고 돌아온 B 씨는 irq.c 에자신이 필요한 기능을 마저 추가하고 저장

얼마 후 A 씨가 돌아오고다시 일을 하기 위해 irq.c 파일을 열어본다

그러나…

A 씨는 점심 식사도 잊은 채 계속 새로운 기능 추가 ,완료 후 irq.c 파일을 저장하고 점심을 먹으러 감

점심을 먼저 먹고 돌아온 B 씨는 irq.c 에자신이 필요한 기능을 마저 추가하고 저장

얼마 후 A 씨가 돌아오고다시 일을 하기 위해 irq.c 파일을 열어본다

그러나…

Page 6: 2006.10.13

6

버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성 앞에서 설명한 두 사례는 프로젝트를 진행하면서

흔히 겪는 일들이다

프로젝트를 진행하면서 중간 파일들을 잘 백업해야 된다는사실은 누구나 공감을 한다

→ 여간 번거로운 일이 아니다 ( 조금만 더 수정하고 백업해야지 하면서도 항상 뒤늦게 백업 ,

사고가 터지고 나서야 백업하지 않은 것을 후회 )

앞에서 설명한 두 사례는 프로젝트를 진행하면서흔히 겪는 일들이다

프로젝트를 진행하면서 중간 파일들을 잘 백업해야 된다는사실은 누구나 공감을 한다

→ 여간 번거로운 일이 아니다 ( 조금만 더 수정하고 백업해야지 하면서도 항상 뒤늦게 백업 ,

사고가 터지고 나서야 백업하지 않은 것을 후회 )

Page 7: 2006.10.13

7

버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성 백업을 자주하더라도 문제가 발생

- 공간 낭비- 프로젝트 파일의 사이즈가 작으면 상관이 없으나 사이즈가 크다면 매번 백업함으로써 공간이 낭비됨

- 백업하는데 드는 시간- 프로젝트 파일의 사이즈가 크면 전체 백업에 시간이 오래 걸림- 작업 흐름을 끊어 놓을 정도로 시간이 오래 걸리면 문제가 될 수 있다

- 백업한 파일들이 각각 어떠한 상황에서 백업했는지 알기 힘듦

- 많은 백업 파일들을 관리하는 것 역시 힘들다

백업을 자주하더라도 문제가 발생

- 공간 낭비- 프로젝트 파일의 사이즈가 작으면 상관이 없으나 사이즈가 크다면 매번 백업함으로써 공간이 낭비됨

- 백업하는데 드는 시간- 프로젝트 파일의 사이즈가 크면 전체 백업에 시간이 오래 걸림- 작업 흐름을 끊어 놓을 정도로 시간이 오래 걸리면 문제가 될 수 있다

- 백업한 파일들이 각각 어떠한 상황에서 백업했는지 알기 힘듦

- 많은 백업 파일들을 관리하는 것 역시 힘들다

Page 8: 2006.10.13

8

버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성 여러 명이 작업하는 경우 보다 심각한 문제 발생

덮어쓰기 문제 발생→ 프로젝트의 성격상 모듈화가 힘들어 하나의 소스를 공유해서 개발할 때 발생

해결 방법 1 하나의 파일에 대해서 한 사람만 수정하는 방법 한 사람만 수정하게 된다면 작업능률이 극도로 저하되기 때문에

현실성이 없는 방법

해결 방법 2 프로젝트를 모듈화 시켜서 개발자들이 각자의 모듈만 작성하고

나중에 작성된 모듈을 합치는 방법→ 모듈화가 가능한 프로젝트로 한정됨

모듈화를 아무리 잘하더라도 다른 사람의 소스를 손 볼일은 생김 테스트를 위해 전체 소스코드가 필요한 경우도 존재함

여러 명이 작업하는 경우 보다 심각한 문제 발생 덮어쓰기 문제 발생

→ 프로젝트의 성격상 모듈화가 힘들어 하나의 소스를 공유해서 개발할 때 발생

해결 방법 1 하나의 파일에 대해서 한 사람만 수정하는 방법 한 사람만 수정하게 된다면 작업능률이 극도로 저하되기 때문에

현실성이 없는 방법

해결 방법 2 프로젝트를 모듈화 시켜서 개발자들이 각자의 모듈만 작성하고

나중에 작성된 모듈을 합치는 방법→ 모듈화가 가능한 프로젝트로 한정됨

모듈화를 아무리 잘하더라도 다른 사람의 소스를 손 볼일은 생김 테스트를 위해 전체 소스코드가 필요한 경우도 존재함

Page 9: 2006.10.13

9

버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성 이러한 문제들

→ 버전 관리 시스템을 사용하면 한 번에 해결

백업 버전 관리 시스템을 사용하면 간단한 명령어로 쉽게 함 전체 파일을 백업하는 것이 아니라 , 바뀐 부분만 백업

→ 공간 절약 , 각 소스들의 바뀐 부분을 알 수 있음 원한다면 특정 상태로 되돌리는 것도 가능

여러 명이 하는 작업 여러 사람이 하나의 소스를 공유하면서 작업하는 것이 가능 앞에서 제기한 여러 문제들은 버전 관리 시스템이 떠맡고 ,

개발자들은 마치 혼자서 작업하는 것처럼 하나의 소스를 가지고 작업

CVS, Subversion, Visual Soursesafe, Clear CaseSCCS, BitKepper

이러한 문제들→ 버전 관리 시스템을 사용하면 한 번에 해결

백업 버전 관리 시스템을 사용하면 간단한 명령어로 쉽게 함 전체 파일을 백업하는 것이 아니라 , 바뀐 부분만 백업

→ 공간 절약 , 각 소스들의 바뀐 부분을 알 수 있음 원한다면 특정 상태로 되돌리는 것도 가능

여러 명이 하는 작업 여러 사람이 하나의 소스를 공유하면서 작업하는 것이 가능 앞에서 제기한 여러 문제들은 버전 관리 시스템이 떠맡고 ,

개발자들은 마치 혼자서 작업하는 것처럼 하나의 소스를 가지고 작업

CVS, Subversion, Visual Soursesafe, Clear CaseSCCS, BitKepper

Page 10: 2006.10.13

10

버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성버전 관리 시스템과 그 필요성 요약

장점 개발 버전과 릴리즈 버전을 섞이지 않고 쉽게 관리 할 수 있다 소스를 잘못 수정했더라도 기록이 남고 되돌리기가 쉽다

( 많은 파일일 경우 유용 ) 수정 , 추가 , 삭제 등의 기록이 모두 남고

변경 사항을 추적하기 쉽다 개발자들이 따로 따로 백업을 하지 않아도 된다

단점 배워야 한다

→ 개발자들이 버전 관리 시스템의 개념을 잘 이해하고 기능들을 잘 사용하여 효율적인 버전 관리가 되게 하려면 또 다시 새로운 것을 배워야 한다는 것 때문에 쉽게 접근하지 않으려는 경향이 있다

요약 장점

개발 버전과 릴리즈 버전을 섞이지 않고 쉽게 관리 할 수 있다 소스를 잘못 수정했더라도 기록이 남고 되돌리기가 쉽다

( 많은 파일일 경우 유용 ) 수정 , 추가 , 삭제 등의 기록이 모두 남고

변경 사항을 추적하기 쉽다 개발자들이 따로 따로 백업을 하지 않아도 된다

단점 배워야 한다

→ 개발자들이 버전 관리 시스템의 개념을 잘 이해하고 기능들을 잘 사용하여 효율적인 버전 관리가 되게 하려면 또 다시 새로운 것을 배워야 한다는 것 때문에 쉽게 접근하지 않으려는 경향이 있다

Page 11: 2006.10.13

11

버전 관리 시스템의 용어들버전 관리 시스템의 용어들버전 관리 시스템의 용어들버전 관리 시스템의 용어들 저장소 : 리포지토리 (Repository) 라고도 하며

- 모든 프로젝트의 프로그램 소스들은 이 저장소 안에 저장 됨- 소스 뿐만 아니라 소스의 변경사항도 모두 저장 됨- 네트워크를 통해서 여러 사람이 접근 가능- 버전 관리 시스템 마다 각각 다른 파일 시스템을 가지고 있으며 ,- Subversion 은 Berkeley DB 를 사용 ( 파일 시스템도 가능하다 )- 한 프로젝트마다 하나의 저장소가 필요

체크아웃 : 저장소에서 소스및 버전 관리 파일들을 받아 오는 것- 체크아웃에도 권한을 줄 수 있다

커밋 (Commit) : 체크아웃한 소스를 수정 , 파일 추가 , 삭제를 한 후에저장소에 저장하여 갱신하는 것- CVS 의 경우 수정한 파일의 리비전이 증가하고 , Subversion 의 경우 전체 리비전이 1 증가하게 된다

저장소 : 리포지토리 (Repository) 라고도 하며 - 모든 프로젝트의 프로그램 소스들은 이 저장소 안에 저장 됨- 소스 뿐만 아니라 소스의 변경사항도 모두 저장 됨- 네트워크를 통해서 여러 사람이 접근 가능- 버전 관리 시스템 마다 각각 다른 파일 시스템을 가지고 있으며 ,- Subversion 은 Berkeley DB 를 사용 ( 파일 시스템도 가능하다 )- 한 프로젝트마다 하나의 저장소가 필요

체크아웃 : 저장소에서 소스및 버전 관리 파일들을 받아 오는 것- 체크아웃에도 권한을 줄 수 있다

커밋 (Commit) : 체크아웃한 소스를 수정 , 파일 추가 , 삭제를 한 후에저장소에 저장하여 갱신하는 것- CVS 의 경우 수정한 파일의 리비전이 증가하고 , Subversion 의 경우 전체 리비전이 1 증가하게 된다

Page 12: 2006.10.13

12

버전 관리 시스템의 용어들버전 관리 시스템의 용어들버전 관리 시스템의 용어들버전 관리 시스템의 용어들 업데이트 : 체크아웃을 해서 소스를 가져왔다 하더라도

다른 사람이 커밋을 하면 소스가 달라진다- 이럴 경우 업데이트를 하여 저장소에 있는 최신 버전의 소스를 가져 옴- 변경된 부분만 가져 옴

리비전 (Revision) : 소스 파일 등을 수정하여 커밋하게 되면일정한 규칙에 의해 숫자가 증가한다- Subversion 의 경우 파일별로 리비전이 매겨지지 않고 한번 커밋으로 전체 리비전이 매겨진다- 리비전을 보고 프로젝트 진행 상황을 알 수 있다

임포트 (Import) : 아무것도 들어있지 않은 저장소에맨 처음 소스를 넣는 작업

익스포트 (Export) : 체크아웃과는 달리 버전 관리 파일들을 뺀순수한 소스 파일을 받아올 수 있다- 소스를 압축하여 릴리즈를 할 때 사용한다

업데이트 : 체크아웃을 해서 소스를 가져왔다 하더라도다른 사람이 커밋을 하면 소스가 달라진다- 이럴 경우 업데이트를 하여 저장소에 있는 최신 버전의 소스를 가져 옴- 변경된 부분만 가져 옴

리비전 (Revision) : 소스 파일 등을 수정하여 커밋하게 되면일정한 규칙에 의해 숫자가 증가한다- Subversion 의 경우 파일별로 리비전이 매겨지지 않고 한번 커밋으로 전체 리비전이 매겨진다- 리비전을 보고 프로젝트 진행 상황을 알 수 있다

임포트 (Import) : 아무것도 들어있지 않은 저장소에맨 처음 소스를 넣는 작업

익스포트 (Export) : 체크아웃과는 달리 버전 관리 파일들을 뺀순수한 소스 파일을 받아올 수 있다- 소스를 압축하여 릴리즈를 할 때 사용한다

Page 13: 2006.10.13

13

버전 관리 시스템의 용어들버전 관리 시스템의 용어들버전 관리 시스템의 용어들버전 관리 시스템의 용어들 저장소의 디렉토리 배치

저장소에 바로 넣을 수도 있지만 , 버전 관리 시스템에서 권장하는 디렉토리 배치 방법

저장소의 디렉토리 배치

저장소에 바로 넣을 수도 있지만 , 버전 관리 시스템에서 권장하는 디렉토리 배치 방법

Page 14: 2006.10.13

14

버전 관리 시스템의 용어들버전 관리 시스템의 용어들버전 관리 시스템의 용어들버전 관리 시스템의 용어들 trunk : 단어 자체의 뜻은 본체 부분 , 나무 줄기 , 몸통 등이다

- 프로젝트에서 가장 중심이 되는 디렉토리- 모든 프로그램 개발 작업은 trunk디렉토리에서 이루어 짐- trunk디렉토리 아래에는 소스들의 파일과 디렉토리가 들어가게 됨

branches : 나무 줄기 (trunk) 에서 뻗어 나온 나무 가지를 뜻함- trunk디렉토리에서 개발하다 보면 큰 프로젝트에서 또 다른 작은 분류로 빼서 따로 개발해야 할 경우가 생김- 프로젝트안의 작은 프로젝트라고 생각하면 됨- branches 디렉토리 안에 또 다른 디렉토리를 두어 그 안에서 개발

tags : 꼬리표라는 뜻- 프로그램을 개발하면서 정기적으로 릴리즈를 할 때 0.1, 0.2, 1.0 하는 식으로 버전을 붙여 발표하게 되는데 그때그때 발표한 소스를 따로 저장하는 공간- 위 그림에서 , tags디렉토리 아래에 버전명으로 디렉토리가 만들어져 있음

trunk : 단어 자체의 뜻은 본체 부분 , 나무 줄기 , 몸통 등이다- 프로젝트에서 가장 중심이 되는 디렉토리- 모든 프로그램 개발 작업은 trunk디렉토리에서 이루어 짐- trunk디렉토리 아래에는 소스들의 파일과 디렉토리가 들어가게 됨

branches : 나무 줄기 (trunk) 에서 뻗어 나온 나무 가지를 뜻함- trunk디렉토리에서 개발하다 보면 큰 프로젝트에서 또 다른 작은 분류로 빼서 따로 개발해야 할 경우가 생김- 프로젝트안의 작은 프로젝트라고 생각하면 됨- branches 디렉토리 안에 또 다른 디렉토리를 두어 그 안에서 개발

tags : 꼬리표라는 뜻- 프로그램을 개발하면서 정기적으로 릴리즈를 할 때 0.1, 0.2, 1.0 하는 식으로 버전을 붙여 발표하게 되는데 그때그때 발표한 소스를 따로 저장하는 공간- 위 그림에서 , tags디렉토리 아래에 버전명으로 디렉토리가 만들어져 있음

Page 15: 2006.10.13

15

Subversion Subversion 설치설치Subversion 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)

설치 환경 펜티엄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)

Page 16: 2006.10.13

16

Subversion Subversion 설치설치Subversion Subversion 설치설치 OpenSSL 컴파일과 설치 Berkeley DB 컴파일과 설치 Apache 컴파일과 설치 Subversion 컴파일과 설치

OpenSSL 컴파일과 설치 Berkeley DB 컴파일과 설치 Apache 컴파일과 설치 Subversion 컴파일과 설치

Page 17: 2006.10.13

17

Subversion Subversion 설치설치Subversion Subversion 설치설치 저장소 만들기 Apache 설정 에디터 설정 기본 디렉토리 만들기

저장소 만들기 Apache 설정 에디터 설정 기본 디렉토리 만들기

Page 18: 2006.10.13

18

Subversion Subversion 활용활용Subversion Subversion 활용활용 import

맨 처음 프로젝트를 시작할 때 저장소에 소스를 넣는 작업sampledir 이라는 디렉토리 생성 후 간단한 소스 작성

이 소스를 저장소의 trunk디렉토리에 import

Import 가 제대로 되었는지 확인

import 맨 처음 프로젝트를 시작할 때 저장소에 소스를 넣는 작업

sampledir 이라는 디렉토리 생성 후 간단한 소스 작성

이 소스를 저장소의 trunk디렉토리에 import

Import 가 제대로 되었는지 확인

Page 19: 2006.10.13

19

Subversion Subversion 활용활용Subversion Subversion 활용활용 checkout

Checkout 을 해서 어디서든 소스를 받아 볼 수 있다(svn checkout 은 svn co 로 줄일 수 있다 )

Checkout 을 한 디렉토리에는 .svn 이라는 디렉토리가 있는데 저장소 정보가 들어있기 때문에 지우면 안됨

update 체크아웃해서 받은 소스를 저장소의 최근 내용으로 업데이트

(svn update 는 svn up 으로 줄일 수 있다 )

checkout Checkout 을 해서 어디서든 소스를 받아 볼 수 있다

(svn checkout 은 svn co 로 줄일 수 있다 )

Checkout 을 한 디렉토리에는 .svn 이라는 디렉토리가 있는데 저장소 정보가 들어있기 때문에 지우면 안됨

update 체크아웃해서 받은 소스를 저장소의 최근 내용으로 업데이트

(svn update 는 svn up 으로 줄일 수 있다 )

Page 20: 2006.10.13

20

Subversion Subversion 활용활용Subversion Subversion 활용활용 commit

Checkout헤서 받은 소스를 수정하고 , 저장소에 수정된 소스를 적용 체크아웃 받은 sample.c 소스를 아래처럼 수정

커밋( 체크아웃해서 소스를 받은 디렉토리에서 실행 , svn commit 은 svn ci 로 줄여 쓸 수 있다 )커밋 로그 입력 후 저장

commit Checkout헤서 받은 소스를 수정하고 , 저장소에 수정된 소스를 적용 체크아웃 받은 sample.c 소스를 아래처럼 수정

커밋( 체크아웃해서 소스를 받은 디렉토리에서 실행 , svn commit 은 svn ci 로 줄여 쓸 수 있다 )커밋 로그 입력 후 저장

Page 21: 2006.10.13

21

Subversion Subversion 활용활용Subversion Subversion 활용활용 log

저장소에 어떤 것들이 변경되었는지 확인

--revision 은 -r 과 동일

하나의 파일이나 디렉토리의 로그도 볼 수 있다

log 저장소에 어떤 것들이 변경되었는지 확인

--revision 은 -r 과 동일

하나의 파일이나 디렉토리의 로그도 볼 수 있다

Page 22: 2006.10.13

22

Subversion Subversion 활용활용Subversion Subversion 활용활용 -v 옵션은 더 자세한 정보를 얻을 수 있다

A 는 Add( 추가 ) 표시

-v 옵션은 더 자세한 정보를 얻을 수 있다

A 는 Add( 추가 ) 표시

Page 23: 2006.10.13

23

Subversion Subversion 활용활용Subversion Subversion 활용활용 diff

예전 소스파일과 지금의 소스파일을 비교 가능 앞의 로그에서 리비전 4에서 sample.c 를 import

리비전 5에서 소스를 수정하고 커밋했음

최초에 import 했던 소스 sample.c 의 리비전 4와수정해서 커밋한 리비전 5의 차이점을 diff 명령으로 출력

diff 예전 소스파일과 지금의 소스파일을 비교 가능 앞의 로그에서 리비전 4에서 sample.c 를 import

리비전 5에서 소스를 수정하고 커밋했음

최초에 import 했던 소스 sample.c 의 리비전 4와수정해서 커밋한 리비전 5의 차이점을 diff 명령으로 출력

Page 24: 2006.10.13

24

Subversion Subversion 활용활용Subversion Subversion 활용활용 리비전 4와 5를 비교하고 싶으면 – revision 4:5를 입력

(--revision 8:10과 같이도 가능 ) 리비전 4와 5를 비교하고 싶으면 – revision 4:5를 입력

(--revision 8:10과 같이도 가능 )

Page 25: 2006.10.13

25

Subversion Subversion 활용활용Subversion Subversion 활용활용 blame

한 소스파일을 대상으로 각 리비전에 대해서 어떤 행을 누가 수정했는지 알아보기 위한 명령

여러 사람이 커밋했을 경우

특정 리비전만 지정

blame 한 소스파일을 대상으로 각 리비전에 대해서 어떤 행을 누가

수정했는지 알아보기 위한 명령

여러 사람이 커밋했을 경우

특정 리비전만 지정

Page 26: 2006.10.13

26

Subversion Subversion 활용활용Subversion Subversion 활용활용 lock

파일을 잠금(왜 잠궜는지 로그 기록 가능 , 파일을 잠그었을 경우 잠근 사용자만 수정을 해서 커밋 가능 , 다른 사용자는 수정불가 )

add 새 파일을 추가 ( 추가 뒤에 커밋을 해야 저장소에 추가 됨 )

lock 파일을 잠금

(왜 잠궜는지 로그 기록 가능 , 파일을 잠그었을 경우 잠근 사용자만 수정을 해서 커밋 가능 , 다른 사용자는 수정불가 )

add 새 파일을 추가 ( 추가 뒤에 커밋을 해야 저장소에 추가 됨 )

Page 27: 2006.10.13

27

Subversion Subversion 활용활용Subversion Subversion 활용활용 branch

프로젝트중 작은 분류로 나누어 개발하거나 ,소스를 따로 분리하여 실험적인 코드를 작성할 경우

서브버전에서는 branch를 copy 명령어로 수행(trunk 의 내용을 Branches 안에 새로운 내용으로 복사 )

Branch된 소스를 받기 위해서는 branches/sample-branch를 체크아웃

branch 프로젝트중 작은 분류로 나누어 개발하거나 ,

소스를 따로 분리하여 실험적인 코드를 작성할 경우 서브버전에서는 branch를 copy 명령어로 수행

(trunk 의 내용을 Branches 안에 새로운 내용으로 복사 )

Branch된 소스를 받기 위해서는 branches/sample-branch를 체크아웃

Page 28: 2006.10.13

28

Subversion Subversion 활용활용Subversion Subversion 활용활용 merge

앞에서 trunk 를 sample-branch로 브랜치했음sample-branch를 수정하다가 trunk 에도 반영하고 싶은 경우 ,merge실행 ( 하나하나 소스코드를 옮겨 입력하지 않아도 된다 !)

파일 하나만 merge 가능

merge 앞에서 trunk 를 sample-branch로 브랜치했음

sample-branch를 수정하다가 trunk 에도 반영하고 싶은 경우 ,merge실행 ( 하나하나 소스코드를 옮겨 입력하지 않아도 된다 !)

파일 하나만 merge 가능

Page 29: 2006.10.13

29

Subversion Subversion 활용활용Subversion Subversion 활용활용 tag

만든 프로그램을 공개할 때 사용0.1 버전을 발표할 때 0.1 버전의 순간을 tags디렉토리에 복사0.2가 되었을 때 tags 아래 0.2디렉토리로 복사→ 각각의 버전 별로 소스를 관리 할 수 있다 ( 저장소에서는 실제로 복사가 되는 것이 아니고 변경된 점만 복사하기 때문에 저장소의 용량이 소스코드의 크기만큼 배로 늘어나지는 않는다 )

0.1 로 tag한 소스를 Export 로 받아서 압축한 뒤에공개 ( 릴리즈 ) 하면 된다

tag 만든 프로그램을 공개할 때 사용0.1 버전을 발표할 때 0.1 버전의 순간을 tags디렉토리에 복사0.2가 되었을 때 tags 아래 0.2디렉토리로 복사→ 각각의 버전 별로 소스를 관리 할 수 있다 ( 저장소에서는 실제로 복사가 되는 것이 아니고 변경된 점만 복사하기 때문에 저장소의 용량이 소스코드의 크기만큼 배로 늘어나지는 않는다 )

0.1 로 tag한 소스를 Export 로 받아서 압축한 뒤에공개 ( 릴리즈 ) 하면 된다

Page 30: 2006.10.13

30

Subversion Subversion 활용활용Subversion Subversion 활용활용 revert

merge 를 했는데 잘못되었을 경우 되돌리는 명령 revert

merge 를 했는데 잘못되었을 경우 되돌리는 명령

Page 31: 2006.10.13

31

Subversion Subversion 활용활용Subversion Subversion 활용활용 dump

저장소를 백업 . 저장소의 내용을 파일로 생성

load 저장소 백업파일을 이용하여 저장소를 복구

dump 저장소를 백업 . 저장소의 내용을 파일로 생성

load 저장소 백업파일을 이용하여 저장소를 복구

Page 32: 2006.10.13

32

SubversionSubversion 의 사용을 도와주는 유틸리티의 사용을 도와주는 유틸리티SubversionSubversion 의 사용을 도와주는 유틸리티의 사용을 도와주는 유틸리티 GUI 클라이언트 프로그램 GUI 클라이언트 프로그램

TortoiseSVTortoiseSVNN

AnkhsvnAnkhsvn RapidSVN RapidSVN

Page 33: 2006.10.13

33

SubversionSubversion 의 사용을 도와주는 유틸리티의 사용을 도와주는 유틸리티SubversionSubversion 의 사용을 도와주는 유틸리티의 사용을 도와주는 유틸리티 웹 인터페이스 웹 인터페이스

ViewCVSViewCVS

WebSVNWebSVN

Page 34: 2006.10.13

34

SubclipseSubclipseSubclipseSubclipse 이클립스용 서브버전 플러그인http://subclipse.tigris.org

이클립스에서 서브버전의 기능들을 쉽게 사용할 수 있도록 도와줌

서브버전은 JavaHL바인딩을 사용 , JavaHL은 JNI를 사용해서자바코드로부터 서브버전 라이브러리를 호출한다

이클립스용 서브버전 플러그인http://subclipse.tigris.org

이클립스에서 서브버전의 기능들을 쉽게 사용할 수 있도록 도와줌

서브버전은 JavaHL바인딩을 사용 , JavaHL은 JNI를 사용해서자바코드로부터 서브버전 라이브러리를 호출한다

Page 35: 2006.10.13

35

SubclipseSubclipseSubclipseSubclipse 설치 과정 설치 과정

Page 36: 2006.10.13

36

SubclipseSubclipseSubclipseSubclipse 설치 과정 설치 과정

Page 37: 2006.10.13

37

SubclipseSubclipseSubclipseSubclipse 설치 과정 설치 과정

Page 38: 2006.10.13

38

SubclipseSubclipseSubclipseSubclipse 설치 과정 설치 과정

Page 39: 2006.10.13

39

SubclipseSubclipseSubclipseSubclipse 설치 과정 설치 과정

Page 40: 2006.10.13

40

SubclipseSubclipseSubclipseSubclipse 설치 과정 설치 과정

Page 41: 2006.10.13

41

SubclipseSubclipseSubclipseSubclipse 시연 시연

Page 42: 2006.10.13

42

Q&AQ&AQ&AQ&A