# SVN 용어 및 명령어
![SVN_PREFIX](/:storage/svn_prefix.png)
---
## 용어
### Repository
- 모든 프로젝트의 프로그램 소스들이 저장되는 저장소. 소스뿐만이 아니라 소스의 변경 사항도 모두 저장된다.
- 네트워크를 통해서 여러 사람이 접근 할 수 있다.
- 버전 관리 시스템 마다 각각 다른 파일 시스템을 가지고 있으며 Subversion은 Berkeley DB를 사용한다.
- 한 프로젝트 마다 하나의 저장소가 필요하다.
### Revision
- 소스 파일등을 수정하여 Commit하면 일정한 규칙에 의해 숫자가 증가
- 저장소에 저장된 각각의 파일 버전
### Trunk
- 모든 프로그램 개발 작업은 Trunk 디렉토리에서 이루어짐
- Trunk 디렉토리 아래에는 바로 소스들의 파일과 디렉토리가 들어가게 된다
### Branch
- 본 프로젝트에서 새로운 기능을 추가할 경우 완성될때까지 다른 기능들에 영향을 미칠 가능성이 있을 경우 프로젝트를 분리해서 작업할 수 있게 하는 기능.
### Tags
- 정기적으로 릴리즈를 할 때 버전을 붙여 발표하게 되는데, 그때 마다 소스를 따로 저장하는 공간
### Head
- REPOSITORY에 저장된 파일(폴더, 프로젝트)의 가장 최신 리비전
---
## 명령어
### Import
- 처음 프로젝트 시작할 때 저장소에 등록하는 명령어
### Commit
- Checkout한 소스를 수정, 파일 추가, 삭제 등을 한 뒤 저장소에 갱신
### Checkout
- 저장소에서 소스를 받아오는 명령어
### Update
- 이전에 가져온 로컬의 소스와 현재 서버의 HEAD REVISION와 동기화 시키는 작업
- 로컬에 가지고 있는 파일들의 버전과 현재 서버 HEAD REVISION과 비교하여 다른 파일이 있다면 서버파일들과 동일하게 동기화 시키는 작업
- 소스 수정이나 Commit 하기전에 한 번씩 해줘야 할 듯. 잘못하면 소스 망치는 경우가 있을 듯
### Revert
- 로컬의 소스를 작업하다가 CHECKOUT 받았을 때의 소스로 복원하는 작업
- 좀 이상함 버그가 많은듯. Update to specific revision를 사용하자
### Switch
- Branch로 생성한 프로젝트를 사용하기 위해서 바꿔주는 것.
### Merge
- Branch로 생성된 프로젝트와 본프로젝트들간을 병합하는 것.
- Merge는 commit까지 하는것은 아니므로 commit 해주어야 함
### Export
- Checkout과는 달리 버전관리 파일을 뺀 순수 소스만 가져오는 명령
### Update
- Checkout해서 받은 소스를 최신의 소스로 업데이트 하는 명령어