- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=1507893&
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.
SVN에 대하여 (Subversion)
1. 버전 관리 시스템의 필요성(이점)
- 여러 명의 개발자들이 같은 코드 기반(code base)을 통제된 방식으로 다룰 수 있게된다.
- 한 팀원이 수정한 코드를 다른 팀원이 덮어쓰게 되면 어쩌나 하는 걱정을 할 필요가 없다.
- 시간의 진행에 따라 변경 내력을 유지할 수 있다.
- 생소한 코드를 보게 되더라도 코드를 누가, 언제,왜 그렇게 고쳤는지 쉽게 알아낼 수 있다.
- 주된 개발 흐름을 유지하면서도 여러개의 릴리스(Release)들을 만들어내는 것이 가능해진다.
- 팀이 작업을 멈출 필요가 없어진다.
- 개발자들이 백업을 하지 않아도 된다.
2. Subversion 이란?
- 파일, 디렉터리를 버전관리하는 것.
- 서브버전은 CVS의 단점을 극복하기 위해서 시작된 것이다.
2.1. SVN & CVS 비교
- 커밋 단위가 파일이 아닌 체인지 셋이다.
CVS에서는 여러개의 파일을 한꺼번에 Commit하더라도 각각의 파일들이 한꺼번에 리비전이 따로 붙지만
SVN에서는 파일별 리비전이 없고 한번 커밋할때 마다 변경사항별로 리비전이 하니씩 증가한다. - 저장소/프로젝트별 환경 설정 가능
- 확장성을 염두에 둔 구조, 깔끔한 소스
2.2. Subversion 용어
Repository(저장소) | 모든 프로젝트의 프로그램 소스들이 이 저장소 안에 저장된다. |
Check Out (체크아웃) | 저장소에서 소스를 받아오는 것이다. |
Commit(커밋) | 개발자가 소스를 수정, 파일 추가, 삭제 등을 한 뒤 저장소에 갱신하는 것이다. |
커밋을 하면 CVS에서는 수정한 파일의 리비전 증가 SVN의 경우는 전체 리비전이 증가한다. | |
Update(업데이트) | 체크아웃을 해서 소스를 받았더라도 다른 사람이 커밋을 하면 소스가 수정되어 있다. |
업데이트를 하여 저장소에 있는 최신 버전의 소스를 가져온다. 바뀐 부분만 받는다. | |
Revision(리비전) | 소스 파일을 수정하여 커밋하면 일정한 규칙에 의해 숫자가 증가한다. |
Import (임포트) | 아무것도 들어있지 않은 저장소에 맨 처음 소스를 넣는 작업이다. |
Export (익스포트) | 버전 관리 파일들을 뺀 순수한 소스 파일을 받아올 수 있습니다. 오픈소스 프로젝트의 경우 소스를 압축하여 릴리즈 할 때 사용한다. |
Tag(태그) | 꼬리표라고 파일 또는 프로젝트에 기억하기 쉬운 이름을 부여하는 기능. |
Branch(브랜치) | 나무줄기(trunk)에서 뻗어져 나온 나무 가지를 뜻함. |
trunk 디렉토리에서 프로그램을 개발하다 보면 큰 프로젝트에서 또 다른 작은 분류로 빼서 따로 개발해야 할 경우가 생긴다. | |
Trunk(가지) | 프로젝트에서 가장 중심이 되는 디렉터리이다. |
소스파일과 디렉터리가 들어간다. | |
Merge(머지) | 브랜치, 가지 둘 다 수정할 경우 브랜치 수정분을 가지에 병합하는것이다. |
2.3. 저장소의 디렉터리 구조 (배치구조)
svn-repos | +--sesame | +--branches | | | +--src | +--tags | | | +--0.0 | +--trunk | +--doc
3. Subversion 설치
- [WEBSTUDY: Server] * URL : http://subversion.apache.org/download/, http://subversion.apache.org/packages.html
- [WEBSTUDY: Client] * URL : http://tortoisesvn.net/downloads
4. 로컬 PC에서 테스트
폴더명칭
- 저장소 : C:/svn-repos
- 프로젝트명 : sesame
- 임시디렉터리 : tmpdir
- 작업폴더명 : work
저장소 만들기
C:\>mkdir c:\svn-repos
C:\>svnadmin create c:\svn-repos
프로젝트 만들기
C:\tmpdir>svn import -m "importing sesame project " . file:///c:/svn-repos/sesame/trunk
작업폴더 만들기
C:\>mkdir c:\work
작업폴더에 저장소 프로젝트 체크아웃(내려받기) _ 사용자1 폴더
C:\work>svn co file:///c:/svn-repos/sesame/trunk sesame
Day.txt에 값을 추가하여 서브버전이 그 변화를 알아채고 있는지 확인해 보자
C:\work\sesame>svn status Day.txt
변경된 내용을 저장소에 commit한다.
C:\work\sesame> svn commit -m "Client wants us to work on weekends"
로그보기
C:\work\sesame> svn log --verbose Day.txt
작업폴더에 저장소 프로젝트 체크아웃(내려받기) _ 사용자2 폴더
C:\work>svn co file:///c:/svn-repos/sesame/trunk aladdin
sesame 디렉터리에서 Number.txt (five 와 six) 추가하고 체크인
C:\sesame>svn commit -m "Customer wants more numbers"
aladdin에서 상태 확인하기
C:\aladdin>svn status --show-updates
버전 차이 보기
C:\aladdin>svn diff -rHEAD Number.txt
aladdin 복사본을 갱신(병합)한다.
C:\aladdin>svn update
두 사람이 같은 파일을 각자 변경한 상황
– aladdin 의 Number.txt 을 SIX 로 수정
– sesame 의 Number.txt 을 ZERO 로 수정
C:\aladdin>svn commit -m "Make 'siz' important"
C:\sesame>svn commit -m "Zero is changing"
C:\sesame>svn update
C:\sesame>svn commit -m "Zero is changing"
C:\aladdin>svn update
G는 병합했음을 뜻함
U는 그냥 덮어썼을 때
5. 네트웍 프로토콜 (클라이언트에서 저장소 접근하기)
- 1.svn 프로토콜
- 2.svn-ssh
- 3.http ( 아파치 웹 서버를 이용)
5.1 SVN을 이용한 Branche 만들기
-- 서버 시작 c:\>start svnserve --daemon --root c:\svn-repos
![]() | 참고1. 인증실패라고 나올 경우
|
-- 디렉터리 만들기 C:\work>svn mkdir -m " Creating branches directrocd ry" svn://74be304f5aa14f4./sesame/branches -- 만든 디렉터리에 새로운 branche 복사 C:\work>svn copy -m "Creating release branch for 1-0" svn://74be304f5aa14f4./sesame/trunk svn://74be304f5aa14f4./sesame/branches/RB-1.0 -- Branche에서 꺼내오기 C:\work>svn co svn://74be304f5aa14f4./sesame/branches/RB-1.0 rb1.0 -- 기존 작업본을 Branche로 전환 C:\ssame>svn switch svn://74be304f5aa14f4./sesame/branches/RB-1.0 -- 작업본을 다시 trunk로 전환 C:\sesame>svn switch svn://74be304f5aa14f4./sesame/trunk
5.2 SVN을 이용한 Tag 생성
-- tags 디렉터리 만들고 그 아래에 릴리스 가지 디렉터리를 복사한다. C:\work>svn mkdir -m "Creating tags Directory" svn://74be304f5aa14f4./sesame/tags C:\work>svn copy -m "Tag release 1.0.0" svn://74be304f5aa14f4./sesame/branches/RB-1.0 svn://74be304f5aa14f4./sesame/tags/REL-1.0.0 -- 새로운 작업본으로 꺼내온다. C:\work>svn checkout svn://74be304f5aa14f4./sesame/tags/REL-1.0.0 client-fix -- common을 가리키도록 전환 C:\work>cd client-fix C:\client-fix>svn switch svn://74be304f5aa14f4./sesame/branches/RB-1.0/common common
5.3 Http (아파치 웹 서버를 이용)
- svn 프로그램 설치 되어 있는 D:\subverion\bin\libdb44.dll
-> C:\Program Files\Apache Group\Apache2\bin 복사
- D:\subverion\bin\mod_authz_svn.so, mod_dav_svn.so
-> C:\Program Files\Apache Group\Apache2\modules 복사
- C:\Program Files\Apache Group\Apache2\conf\http.conf 아래 내용 추가
<Location /svn-repos> DAV svn SVNPath C:\svn-repos </Location>
- http.conf에 다음주석 표시제거
LoadModule dav_module modules/mod_dav.so
- 결과가 제대로 나올려면
http://localhost:80/svn-repos
6. 이클립스에서 저장소 접근하기
- 이클립스에서 테스트 하기
문서에 대하여
- 작성일자 : 임영미
- 작성자 : 2008년 9월 25일
- 참고자료: 서브버전을 이용한 실용적인 버전 관리
http://www.pyrasis.com/main/Subversion-HOWTO - 이 문서는 오라클클럽 자바 웹 개발 스터디모임에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.
문서정보
- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=1507893&
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.