CVS 후속 버전으로 나온 것이 SVN이다. 이것은 바이너리등의 파일 적용이 추가되어 기능이 다양해 졌다. 아직도 CVS을 많이 사용하지만 점점 SVN도 늘어나고 있다.
그러나 버전 간의 데이터가 SVN의 통합 파일로 이루어저 있고, 버전 계층(버전과 다음버전간) 간에 연관성이 확고하다. 즉, 이전버전 파일이 없으면 다음버전의 파일에 영향을 미쳐 나누어 파일을 저장한다든지 하는 문제가 발생 한다. 이전 파일이 있어야 다음버전이 복구된다는 이야기 이다. 개인적으로 이것은 불편한 요소이다. 중간에 파일이 문제가 생길 수도 있을 것 같고. backup과 연관되어 이전버전의 파일도 고려하여 다루어야 한다. 그리고 텍스트 파일 형태가 아니므로 이것도 약간은 불편하다. 어째든 이것이 버전관리에서 대세이므로 이것을 사용하는 것이 좋을 것 같다.
import
Import : 내컴퓨터 -> Repository
맨 처음 프로젝트를 시작할 때 저장소에 소스들을 넣어야 한다. 이럴 때 하는 것이 import 작업이다.
import 하면 저장소의 trunk 디렉토리에는 sampledir 디렉토리안의 sample.c 파일만 올라가게 되고 sampledir은 올라가지 않는다.
sampledir# cd ..
# svn import sampledir http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/trunk
# svn list http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/trunk
sample.c
checkout
checkout : Repository -> 내 컴퓨터
이제 부터 Subversion을 이용해서 프로그램 소스를 관리 할 수 있다. checkout을 해서 어디서든 소스를 받아 볼 수 있다. 방금 import를 하기위해 만들었던 sampledir은 지워도 된다.
# svn checkout http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/trunk sample
A sample/sample.c
Checked out revision 4.
update
Update : Repository -> 내 컴퓨터
sample# svn update
- 만약 main.cpp 파일을 변경 하면, Update 를 해도 아무런 변화가 일어나지 않는다.
- 내가 아닌 다른 사람이 Repository 를 변경시켰을 때, Update 를 적용할 수 있다.
Update to revision # :
원하는 번호의 Revision 으로 되돌릴 수 있는 기능이다.
(최신 Revision 은 HEAD 이다. 실수로 잘못 수정을 한 후 Commit 을 했더라도, 그 HEAD 이전의 Revision 으로 되돌릴 수 있다.
commit
Commit : 내컴퓨터 -> Repository
내 컴퓨터에서 Repository 로 저장하는 것을 의미한다.
import가 버전의 시작이라면 commit는 버전을 저장소로 보내는 역활을 한다. 수정이 되면 수정된 내용을 저장소로 보낸다.
Revert
Revert : Repository -> 내 컴퓨터
Commit 전에 방금 내가 한 수정을 취소할때 사용된다. 즉, 아직 Commit 을 하지 않았다면,
현재 Repository 에는 내가 수정한 내용이 적용되지 않았을 것이다. 이때 Revert 하면, Repository 에 있는
수정전의 내용이 내 컴퓨터로 적용된다.
기타
Lock/Unlock :
이름만으로도 유추할 수 있듯이, Lock 을 걸면 다른 사람이 이것을 변경할 수 없다.
(정확히 말하면 읽기는 가능하니까, 수정을 해도 Commit 이 안되는 것이다.)
이것은 Unlock 이 될 때까지 지속되는데, 이것이 일종의 문제이다.
(사람의 실수로) Unlock 이 장시간 안되면 효율적인 작업에 문제가 생길 수 있다.
(그렇기 때문에, Repository 는 revision 등의 기능과 함께 Tree 구조를 구성한다.)
WRITTEN BY
- 정현석
이것저것 끄적끄적....