형상 관리 - 버전 관리 도구 -
▼버전관리 도구 구분
★형상 관리 관련 주요 용어
저장소(Repository): 최신 버전의 파일들과 변경 내역에 대한 정보들이 저장되어 있는 공간
가져오기(Import): 버전 관리가 되고 있지 않은 아무것도 없는 저장소(Repository)에 처음으로 파일 복사
체크아웃(Check-Out): 저장소에서 파일을 받아온다 / 소스파일과 함께 버전관리를 위한 파일을 받아온다
체크인(Check-In): 체크아웃 한 파일의 수정을 완료한 후 저장소(Repository)에 새로운 버전의 파일로 갱신
커밋(Commit): 체크인 수행시 이전에 갱신된 내용이 있는 경우 충돌을 알리고 Diff 도구로 수정 후 갱신 완료
동기화(Update): 저장소에 있는 최신 버전으로 자신의 작업공간을 동기화
차이(Diff): 새로운 개발자가 추가된 파일의 로그(Change Log)를 확인하면서 이전 개발자가 처음 추가한 파일과 이후 변경된 파일의 차이 확인
브랜치(Branch; 가지): 메인 개발 과정과 별도로 새로운 기능의 테스트와 같이 추가적인 작업을 수행하기 위한 서브 디렉토리. branches 디렉토리 하위에 작업별 디렉토리를 만들고 그 안에서 개발을 진행한다. 이후 이 별도의 개발 결과를 Trunk와 병합할 수 있다.
트렁크(Trunk; 몸통): 개발 메인 디렉토리. 소스 파일과 추가 작업을 위한 서브 디렉토리(branch)가 존재.
★버전 관리 도구 구분
공유 폴더 방식 | 담당자 한 명이 공유 폴더 내 자료를 자신의 PC로 복사한 후 컴파일하여 이상 유무를 확인하고, 파일의 오류가 확인되면, 해당 파일을 등록한 개발자에게 수정의뢰한다. 개발자들은 매일 완료된 파일을 공유 폴더에 복사하여 관리한다. 파일에 이상이 없다면 다음날 각 개발자가 동작 여부를 다시 확인한다. 파일의 변셩사항을 데이터베이스에 기록하여 관리한다. 종류: SCCS, RCS, PVCS, QVCS |
클라이언트/ 서버 방식 | 버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리되는 방식이다. 서버의 자료를 개발자별로 자신의 PC로 복사하여 작업 후 변경된 내용을 서버에 반영하고, 모든 버전 관리는 서버에서 수행하는 방식이다. 하나의 파일을 서로 다른 개발자가 작업할 경우 경고 메세지를 출력한다. 서버에 문제가 생기면 서버가 복구되기 전까지 다른 개발자와의 협업 및 버전 관리 작업을 중단한다. 종류: CVS, SVN, CMVC, Perloroe, CVSNT, Clear, Case |
분산 저장소 방식 | 버전 관리 자료가 원격 저장소와 로컬 저장소와 함꼐 저장되어 관리된다. 로컬 저장소에서 버전 관리가 가능하므로 원격 저장소에 문제가 생겨도 로컬 저장소의 자료를 이용하여 작업할 수 있다. 개발자 별로 원격 저장소의 자료를 각자의 로컬 저장소로 복사하여 작업 후 변경사항을 로컬 저장소에서 우선 적용하여 로컬 버전 관리가 가능하다. 개발 완료된 파일을 수정한 다음에 로컬 저장소에 먼저 커밋한 이후, 다시 원격 저장소에 반영하는 반식이다. 종료: Git, Vazaar, Mercurial, TeamWare, Bitkeeper, Plastic SCM, GNU arch |
★ 주요 버전 관리 도구
CVS(Concurrent Version System) |
동시 버전 시스템으로 소프트웨어 프로젝트를 진행할 떄 파일로 이뤄진 모든 작업과 변화를 추적하고 여러개발자가 협력하여 작업할 수 있게 한다. 오픈소스 프로젝트에서 널리 사용 되었지만 최근에는 CVS가 한계를 맞아 이를 대체하는 Subversion이 개발되었다. |
RCS( RecisionControl System) |
CVS와의 차이점은 소스 파일의 수정을 한 사람만으로 제한된다. 다수 사용자가 동시에 파일 수정을 할 수 없도록 파일 잠금 방식으로 버전을 관리하는 도구이다. |
SVN(Subversion) | CVS에서 속도 개선, 저장공간, 변경 관리 단위가 작업 모름 단위로 개선. 2000년부터 콜렙넷에서 개발 CVS와 사용 방법이 유사해 CVS사용자가 쉽게 도입해 사용할 수 있으며, 아파치 최상위 프로젝트로서 전 세계 개발자 커뮤니티와 함께 개발되고 있다. 디렉터리 파일을 자유롭게 이동해도 버전 관리가 가능하다. |
Bitkeeper | SVN과 비슷한 중앙 통제 방식으로 대규모 프로젝트에서 빠른 속도를 내도록 개발된 버전관리 도구이다. |
Git | 프로그램 등의 소스 코드 관리를 위한 분산 저장소 방식 시스템이다. 리누스 토르발스가 리눅스 커널 개발에 이용하려고 개발하였으며,현재는 다른 곳에도 널리 사용되고 있다. 지역 저장소와 원격 저장소 2개의 저장소가 존재하는데 지역저장소에서 버전관리가 진행되어 처리가 빠르다. 깃의 작업 폴더는 모두 전체 기록과 각 기록을 추적할 수 있는 정보를 포함하고 있으며, 네트워크에 접근하거나 중앙 서버에 의존하지 않는완전한 형태의 저장소이다. |
Clear Case | 복수 서버, 복수 클라이언트 구조이기에 서버 확장 요구가 있을 때 필요한 서버를 하나씩 추가할 수 있다. |
★컴포넌트 저장소(Repository)
인증을 받은 컴포넌트를 등록하는 저장소로 손쉽게 컴포넌트를 이용할 수 있다.
저장소는 컴포넌트의 최신 버전을 유지하고 있으며, 컴포넌트의 버전별 상태도 유지하고 관리함으로서 사용자가 컴포넌트 이용을 쉽게 한다.
★Git과 Subversion 주요 명령어
Git | Subversion | ||
init | 새로운 로컬 git 생성하기 | import | 아무것도 없는 서버의 저장소에 맨처음 소스파일을 저장한다. |
add | 저장소에 파일 추가하기 | checkin | 페크아웃으로 가져온 파일을 수정 후 저장소에 새로운 버전으로 갱신한다. |
commit | 작업 내역 지역 저장소에 저장하기 | checkout | 타 개발자가 수정 작업을 위하여 저장소에 저장된 파일을 자신의 작업 공간으로 불러온다. |
branch | 새로운 파생 저장소인 브랜치 생성하기 | commit | 체크인 시 이전 갱신 사항이있는 경우 충돌이 있을 경우 알림을 표시하고 diff도구를 이용하여 수정한 뒤 커밋과정을 수행한다. |
checkout | 선택한 브랜치로 이동하기 | diff | 새로운 개발자가 추가된 파일의 수정 기록을 보면서 기존 개발자가 처음 추가한 파일과 이루 변경된 파일의 차이를 본다. |
merge | 현재 브랜치와 지정한 브랜치를 병합하기 | update | 저장소에 존재하는 최신 버전 자료와 자신의 작업 공간을 동기화 한다. |
fetch | Git 서버에서 코드를 받아오기 | branch | 주 저장소에서 파생된 프로젝트이다. |
pull | Git 서버에서최신 코드 받아와 병합하기 | lock/unlock | 파일과 다이렉터리를 다른 개발자가 손댈수 없게 잠금하거나 잠금을 해제한다. |
remote | 원격 저장소 추가하기 | export | 서버의 저장소에서 소스 파일을 불러온다. |
clone | 원격 저장소에 있는 프로젝트 복사하여 내려박기 |
info | 지정된 파일에 대한 정보를 표시한다. |
fork | 저장 원격저장소 에서 원격 복제하기 | merge | 다른 디렉터리에서 작업된 버전 관리내역을 기본 개발 작업과 병합한다. |