Subversion(SVN, 버전관리 시스템)은 프로젝트 전반적으로 사용하는 파일들을 관리하기 위한 시스템이다.
Subversion은 다수의 개발자가 프로그램을 개발할 때 개발된 버전 관리는 통해 History 를 관리할 수 있도록 하며 전체 팀의 공통 모듈을 일관성 있게 관리할 수 있도록 한다. 본 온라인 메뉴얼의 설명이 되는 대상과 전자정부 표준 프레임워크의 개발환경에 포함되어 제공되는 Subversion의 설치 버전은 다음과 같다.
Subversion은 실제의 작업용 디렉터리(작업공간) 이외에, 저장소(repository)라고 하는 영역에 최초의 데이터와 그 이후의 갱신 이력이나 변경 분 정보를 저장한다.
저장소는 복수 개 생성 가능
사용할 수 있는 파일이나 디렉터리는 import 로 저장소에 등록
checkout을 실행하면 저장소 내용이 작업공간에 복사됨과 동시에 관리 정보를 수록하는 .svn 디렉터리가 생성되며, 이 작업은 최초 1회만 필요하다.
파일이나 디렉터리를 수정하면 commit 로 변경분이 저장소에 등록되며, 저장소에 있는 다른 변경 분을 작업 디렉터리에 반영하고 싶을 때는 update를 수행한다.
관리 정보 없이 저장소 내용을 가져오고 싶을 때는 export 를 수행한다.
저장소(Subversion Repository)에서는 버전화 된 모든 데이터를 관리하며, 클라이언트 프로그램은 로컬 환경의 복사된 데이터를 관리한다. 이 사이에는 다양한 저장소 액세스(RA) 층을 통하여 통신 한다.
svn : 커맨드라인 클라이언트 프로그램
svnversion : 작업복사의 상태를 관리를 하는 프로그램
svnlook : Subversion의 저장소를 조사하기 위한 툴
svnadmin : Subversion의 저장소를 조정하거나 복원하기 위한 프로그램으로 시스템 관리자에 의해 사용됨
svndumpfilter : Subversion 저장소의 덤프 파일 형식의 데이터에 대한 필터 프로그램
mod_dav_svn : Apache
HTTP 서버용의 플러그 인 모듈로 저장소를 네트워크상 다른 사용자가 사용할 수 있도록 함
svnserve : demon으로 또는 SSH로부터 기동되는 독립 서버 프로그램으로 네트워크에 있는 저장소를 사용할 수 있도록 하는 다른 방법
디렉터리의 버전 관리
버전 이력 기능 강화
Subversion 에서는 파일과 디렉터리의 모두에 대해서 추가, 삭제, 복사, 명칭 변경을 할 수 있다.
신규 추가되는 모든 파일은, 거기로부터 새롭게 시작되는 이력을 갖는다.
Atomic Commit
변경점의 모임은, 그것 전체가 저정소에 완전하게 반영되는지, 전혀 반영되지 않는가 중 하나이다.
개발자는 논리적으로 한 묶음의 변경을 만들어 Commit 할 수 있어 일부만이 저장소에 반영되어 버리는 문제가 발생하지 않는다.
메타데이타 버전관리
네트워크층의 선택
데이터 처리의 일관성
Subversion은 동일한 알고리즘을 사용해 파일의 변경분을 표현한다.
텍스트(읽을 수 있는 데이터)에도, 바이너리(간단하게 읽을 수 없는 데이터)에 대해서도 같은 방법으로 동작한다.
효율적인 브랜치, 태그의 작성
확장하기 쉬움
체크 아웃(import)
커밋(commit)
체크인(check-in)이라고도 하며 check-out한 소스를 수정, 파일 추가, 삭제한 후 로컬 사본에 대한 변경 사항을 저장소에 갱신하는 것임
커밋을 하면 Subversion의 경우 전체 리비전이 1 증가하게 됨
커밋을 수행하면 커밋이후로 사용자는 “update” 이후 특정 파일의 최신 버전을 볼 수 있음
업데이트(update)
사용자의 가장 최근 변경 사항이 있는 작업 사본을 저장소와 동기화하는 것으로, 파일의 가장 최근 작업 사본을 로컬 드라이브로 가져옴(바뀐 부분만 가져옴)
파일을 변경하기 전에 언제나 갱신을 수행하는 것이 최우선 원칙임
임포트(import)
익스포트(export)
충돌(conflict)
리비전(revision)
소스파일 등을 수정하여 커밋하게 되면 일정한 규칙에 의해 숫자가 증가하게 되는데, 이 숫자가 저장소에 저장된 각각의 파일 버전임
여러개의 파일 중 하나만 변하여 commit 하더라도 모든 파일의 버전은 올라가며 버전은 프로젝트 단위로 증가함
트렁크(trunk)
브랜치(branches)
trunk 디렉터리에서 프로그램을 개발하다 보면 큰 프로젝트에서 또 다른 작은 분류로 빼서 따로 개발해야 할 경우가 생기는데, 이 때 branches 디렉터리 안에 또 다른 디렉터리를 두어 그 안에서 개발함
브랜치는 대부분 주요 개발 브랜치를 컴파일러 오류나 버그로 방해하지 않고 새로운 기능을 테스트할 경우에 생성함
태그(tag)
후크(hook)
후크는 새로운 개정판의 생성이나 버전 관리가 되지 않은 속성의 수정과 같은 저장소 이벤트에 의해 실행되는 프로그램임
후크는 그 이벤트가 무엇인지, 어떤 목표로 작동하는지, 이벤트를 실행한 사람의 사용자 이름이 무엇인지 알려줌
잠금(lock)
병합(merge)
저장소 만들기
Subversion repository는 향후 repository의 추가와 관리가 용이하도록 복수 개의 repository 구성을 추천한다.
Root Repository 를 위한 directory를 생성한다.
> mkdir repository
각각의 Repository를 생성한다.
> cd repository
> svnadmin create --fs-type fsfs repo1
> svnadmin create --fs-type fsfs repo2
인증/권한 정보 설정 (conf/svnserve.conf)
각 repository conf 폴더(또는 디렉토리)의 svnserve.conf 파일에서 해당 repository의 사용권한을 설정한다.
anon-access (익명사용자), auth-access (인증된 사용자)에 대한 설정을 하지 않는 경우, default로 익명사용자는 읽기권한, 인증된 사용자는 쓰기권한이 부여된다.
다음은 svnserve.conf 작성의 예이다.
[general]
### These options control access to the repository for unauthenticated
### and authenticated users. Valid values are "write", "read",
### and "none". The sample settings below are the defaults.
# anon-access = read
# auth-access = write
# 익명 사용자는 접근을 허용하지 않고 인증된 사용자만 쓰기 권한을 부여한다.
anon-access = none
auth-access = write
### The password-db option controls the location of the password
### database file. Unless you specify a path starting with a /,
### the file's location is relative to the conf directory.
### Uncomment the line below to use the default password file.
# 패스워드 파일은 기본값인 conf/passwd 파일을 사용한다.
password-db = passwd
### The authz-db option controls the location of the authorization
### rules for path-based access control. Unless you specify a path
### starting with a /, the file's location is relative to the conf
### directory. If you don't specify an authz-db, no path-based access
### control is done.
### Uncomment the line below to use the default authorization file.
# 리포지토리의 디렉토리별, 사용자 그룹별 권한관리를 하지 않는 경우, 추가적인 권한
# 설정을 사용하지 않는다.
# authz-db = authz
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa. The default realm
### is repository's uuid.
# 이 리포지토리의 인증 시 나타나는 타이틀을 지정한다.
realm = eGovFrame SVN Repository
저장소 만들기
각 repository conf 폴더(또는 디렉토리)의 passwd 파일에서 사용자를 등록한다. 형식은 사용자 'id = 패스워드'이며, 패스워드는 현재 평문 형식이다.
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.
[users]
# harry = harryssecret
# sally = sallyssecret
developer01 = 123qwe
developer02 = 123qwe
백업 및 복구
Dump : 표준 입출력을 통해서 저장소의 내용을 파일로 생성한다. svnadmin dump 명령을 사용하며 이 명령은 저장소 디렉토리 바깥에서 사용해야 한다.
> ls
repository
> svnadmin dump repository > repository.dump
Load : 저장소 백업 파일을 이용해서 저장소를 복구한다. svnadmin load 명령을 사용하며, 빈 저장소를 생성한 뒤 백업 파일을 이용해서 복구 한다.
> svnadmin create repository
> ls
repository repository.dump
> svnadmin load repository < sample.dump
이 위키의 내용은 다음의 라이센스에 따릅니다 :
CC Attribution-Noncommercial-Share Alike 3.0 Unported전자정부 표준프레임워크 라이센스(
바로가기)
전자정부 표준프레임워크 활용의 안정성 보장을 위해 위험성을 지속적으로 모니터링하고 있으나, 오픈소스의 특성상 문제가 발생할 수 있습니다.
전자정부 표준프레임워크는 Apache 2.0 라이선스를 따르고 있는 오픈소스 프로그램입니다. Apache 2.0 라이선스에 따라 표준프레임워크를 활용하여 발생된 업무중단, 컴퓨터 고장 또는 오동작으로 인한 손해 등에 대해서 책임이 없습니다.