SVN에 대한 사용법은 아래 참고 자료를 참고하길 바란다. 여기서는 소스 관리위해서 각 프로젝트 별로 디렉토리 구성 및 전략전 관리 방법에 대해서 다루도록 하겠다.
아직 내용은 기존 SVN에 있는 trunk, brahces, tags 개념을 소개하는 수준이다. 내용도 보인 자신의 기준으로 정리한 것이기에 일반적인 내용이라고 말할 수는 없다.
작성일: 2009.04.06 (http://ospace.tistory.com/), ospace114@empal.com
개요
SVN를 사용하는 이유가 소스관리를 쉽게하며 중앙 집중화된 관리 방법을 사용하기 위해서이다. 이렇게 되면 여러사람이 공통의 프로젝트를 진행하는데 많은 어려움이 사라진다. 이런 어려움은 다른 곳에서 찾아보시고.. ㅡ.ㅡ;
개발버전과 안정버전
일반적으로 프로젝트를 개발하다 보면 개발버전과, 안정버전으로 나뉘어진다. 이런 형식은 전형적인 프로젝트 개발 수행 형태이다. 보통 하나의 프로젝트가 수행되면서 중간의 결과물을 버전별로 구분해서 산출물을 도출하게 된다.
즉, 하나의 큰 줄기가 가운데로 뻗어가고, 옆으로 잔가지가 하나씩 나오는 구조이다. 가운데 가지가 개발버전이고, 잔가지가 안정화버전이라고 생각하면 될 듯한다.
[그림] 가로에 큰 줄기, 잔가지
새로운 가지
실제로 개발하다 보면은 이렇게 단순하지는 않다. 때에 따라서 커스터마이징에의해 새로운 형태의 버전이 생성되게된다. 즉, 새로운 종류의 줄기가 생성되면서 나름대로의 성장과정을 거친다.
SI를 하는 경우를 보면, 커다란 프로젝트 내에 여러 개의 세부 프로젝트가 동시에 진행된다. 그리고 각 프로젝트는 따로 수행되는 것이 아니라, 메인 프로젝트로 합쳐지면서 최종적인 결과물을 만들게 된다. 이를 위해서 원래 코드 줄기에서 새로운 줄기를 때어내서 새로운 가지를 만들게 된다.
물론 새로운 가지는 계속 성장하다가 다시 원래 코드 줄기로 합쳐질 수 있다.
SVN용어에 따르면 원래 코드 줄기가 trunk이며 새로운 가지가 branches라고 보면 된다. 그리고 중간에 안정버전은 tags에 놓이게 된다. 이 tag에 놓인 안정버번은 프로그램 디버깅등의 에러 수정을 위한 유지보수에 사용되어 진다.
다시 trunk, branches와 tags의 브런칭 개념의 소스관리 방법은 Perforce라는 Perforce co.,에서 개발한 소스관리 프로그램에서 기인한다. 브런칭은 가지 분리하는 것으로 각 가지별로는 소스관리를 독립적으로 수행하는 형태이다.
각각을 설명하면,
- trunk: 나무줄기, 몸통이라는 의미로 프로젝트에서 가장 중심이 되는 줄기이다. 모든 개발관련 작업은 이곳에서 수행됩니다. 이 줄기 아래에 프로젝트 디렉토리 구조 및 사용라이브러리, 코드가 들어간다.
- branches: 나무가지로서 나무줄기에서 뻗어나온 가지이다. 프로젝트 진행시 작은 프로젝트로 분류해서 개발하거나 따로 개발해야되는 경우에 사용한다. 프로젝트 안에 프로젝트 형태이다. 새로운 개발 디렉토리와 소스코드가 들어간다.
- tags: 꼬리표라는 의미입니다. 정기적으로 릴리즈되는 버번을 버전별로 디렉토리(꼬리표 형태)를 만들어 저장한다. 특 tags 디렉토리 안에 버전명이 디렉토리 명으로 사용되어진다.
이런 브런칭을 하기 위해서는 svn에서 사용하는 명령은 "snv copy"이다. 단순 복사하는 형태이다. 그렇다고해서 실제 복사하는 것은 아니고, 링크만 걸어두며 수정된 파일에 대해서만 따로 저장해서 관리한다.
아래는 Wiki에 있는 그림으로 SVN의 브런칭 개념을 잘 보여주고 있다.
참조:
[1] Subversion(software), http://en.wikipedia.org/wiki/Subversion_(software)
[2] Subversion 사용 HOWTO, http://www.pyrasis.com/main/Subversion-HOWTO
'4.개발 및 운영 환경' 카테고리의 다른 글
실행시간 측정 (0) | 2009.04.13 |
---|---|
VMWare대신 사용할 수 있는 coLinux (0) | 2009.04.06 |
데비안에 나눔글꼴 적용 (0) | 2009.03.24 |
Cygwin에서 resolv 라이브러리 (0) | 2009.03.24 |
Socket에서 select사용하기 (2) | 2009.01.15 |