📖 형상관리(Configuration Management) 혹은 버전관리(Version Management)
- 프로젝트를 진행할 때 각자 업무를 나눠서 맡은 부분을 개발하게 되는데 각자가 개발한 코드 혹은 문서들을 하나의 관리 도구에서 통합적으로, 버전별로 관리하게 되는 것
- 중앙집중관리식의 SVN과 분산관리식의 Git
아파치 라이선스를 보유하고 있으며 오픈소스
소스의 저장소를 서버로 두고 작업하는 PC를 클라이언트로 연결하여 소프트웨어 개발시 소스의 수정과 변경사항을 관리할 수 있는 도구
작업 내역 커밋시 소스 변경사항과 히스토리가 즉시 서버로 전송되고 저장이 되어 관리가 용이하며 과거의 수정 내역과 히스토리 파악이 용이해짐
강력한 분산기능과 확장성
svn이 기존에 가지고 있던 기본 틀인 클라이언트와 서버 간 버전관리의 문제점을 보완
svn은 반드시 리모트 서버가 필요하지만 git은 로컬, 클라이언트, 리모트 간의 종속성을 깨는 구조를 보여줌
👉 작업을 진행하는 로컬 자체가 서버가 될 수 있고 클라이언트가 될수 있으며 브렌치와 태그를 프로그래머 마음대로 로컬에서 커밋과 관리가 가능해짐
👉 로컬도 서버가 될 수 있으며 서버도 로컬이 될 수 있음
Windows, 리눅스, Mac등 어느 OS에서건 사용이 가능함
내 로컬 PC에서 Commit을 하면 로컬 저장소에 반영이 되고 로컬 저장소에서 Push를 하면 원격저장소에 반영됨
원격 저장소로부터 클라이언트에서 checkout을 하고 checkout을 한 공간에서 코딩 혹은 수정을 한 이후에 검증이 완료되었다면 commit만 하면 쉽게 svn에 작업 내역이 저장됨
중앙집중식으로 소스가 관리됨
즉 여러명의 개발자들이 1개의 저장소에 접속하여 개발을 수행함
👉 두사람이 하나의 파일을 동시에 수정하고 커밋한다면 충돌이 일어날 확률이 높음
로컬 PC에서 작업내용을 Commit하여 로컬 저장소에 반영한 후 원격저장소에서 fetch로 로컬저장소로 마스터 파일을 받아와서 충돌이 일어나지 않게 merge를 이용하여 합친 다음, 로컬저장소의 내용을 push하여 원격저장소에 올려야 다른사라멩게 나의 작업내용이 공유됨
메인 저장소를 따로 두고 소스만 공유하는 저장소를 두면서 프로그래머가 clone한 다음에 작업을 진행하고 나서 저장소 관리를 하는 매니저에게 수정요청을 하는 구조
SVN | Git | |
---|---|---|
사용법 | 간편, 어렵지 않음 | 다소 복잡하고 초보자가 이해하기 어려움 |
기능 | 버전관리에 최적화된 간편한 기능 | 다양한 기능, 버전관리에 필요한 모든 기능이 있음 |
프로세스 | 중앙 집중식 | 분산 관리식 |
소스충돌 위험 | 매우 높음 | 권한 설정을 통해 충돌 위험 감소 |
저장소 백업 여부 | 저장소 백업이 용이 하지 못함 | git 저장소만 있으면 리코으 복구 언제든지 가능, 매우 용이 |
다수 작업 관리 | 한계 존재 | 수백 ~ 수천의 프로그래머의 분산작업에 용이 |
작업 내용 복구 | 다소 불편함 | 예전 리비전으로 복구가 매우 편리 |
브렌치 생성 | 다소 불편함 | 로컬에서 브렌치 생성 및 태그 생성이 매우 편리함 |
📑 References