코딩두의 포트폴리오

OSS - 03_버전관리시스템과 Git 본문

Open Source Software

OSS - 03_버전관리시스템과 Git

코딩두 2024. 4. 7. 16:00

버전 관리(Versin control, revision control)란?

버전 관리, 소스(코드) 관리란?

동일한 정보에 대한 여러 버전을 관리하는 것

데이터의 과거와 현재 상태를 관리하는 것

 

버전 관리 시스템이란?

Versin Control System(VCS)

수작업으로 하던 사본 생성, 보존, 복원 작업 자동화 도구

협업 시 서로 간의 상태를 동일하게 유지하는 기능 제공

ex) SVN, CVS

버전 관리 시스템의 구조

 

버전 관리 시스템의 종류(1)

클라이언트 - 서버 모델

하나의 중앙 저장소(서버)를 공유. 클라이언트(개발자)는 자신이 작업하는 부분만 로컬에 임시 저장하여 작업

중앙 저장소에서 프로젝트 관리의 모든 부분 처리

클라이언트는 파일 수정과 서버로의 커밋(commit)만 처리

클라이언트 - 서버 모델

 

무료와 유료의 구분에 따른 분류

클라이언트 - 서버 모델의 버전 관리 시스템

 

버전 관리 시스템의 종류(2)

분산 모델

프로젝트에 참여하는 모든 클라이언트(개발자)가 전체 저장소에 대한 개별적인 로컬 저장소를 갖고 작업

클라이언트 각자가 온전한 전체 저장소의 사본을 로컬에 가짐

무료와 유로의 구분에 따른 분류

분산 모델의 버전 관리 시스템

 

각 모델에서 대표적인 버전 관리 시스템

  1. CVS 클라이언트 - 서버 모델
  2. SYN (Subversion) 클라이언트 - 서버 모델
  3. Mercurial 분산 모델
  4. Git 분산 모델

 

CVS - 딕 구룬

Concurrent Versions System(CVS)

클라이언트 - 서버 방식의 버전 관리시스템

버전 관리 시스템의 대명사, 가장 오래된 시스템

 

CVS는 서버의 저장소에 프로젝트의 온전한 원본이 있고, 클라이언트 각각은 서버에서 파일을 가져다가 로컬 저장소에서 변경한 뒤 변경한 내역을 서버에 다시 보냄

CVS의 동작 흐름

  • 파일 각각의 버전을 관리, 추적 가능
  • 파일 이름이 변동, 이동되는 것을 자동으로 추적 X
  • 프로젝트의 완전한 버전은 오직 서버에만 존재
  • 서버에 문제가 생기면 프로젝트 복구에 어려움

 

SVN(Subversion) - 콜렙넷

CVS의 여러 단점을 개선한 클라이언트 - 서버 모델

현재는 아파치 최상위 프로젝트

CVS와 호환, 강력한 기능이 많아 지금도 많이 사용되고 있는 버전 관리 시스템, 더 나은 기능 제공

 

브랜치(branch)

서로 영향을 받지 않는 작업 단위

각각의 클라이언트가 작업하는 하나의 브랜치는 병합하기 전까지 다른 브랜치의 영향 받지 X

서브 버전의 브랜칭 개념도

SYN 장점

  • 타 사용자의 커밋과 엉키지 않음 -> 실패 시 롤백(DB에서 업데이트에 오류가 발생할 때, 이전 상태로 되돌리는 것)가능
  • 직관적
  • 파일과 디렉터리의 삭제, 이동, 이름 변경, 복사 지원 <-> CVS는 지원 X
  • 이진 파일도 효율적으로 저장 가능
  • 디렉터리도 버전 관리 가능
  • 저장소 크기에 상관없이 일정한 시간 안에 가지치기나 태그 가능
  • 처리 속도 상대적으로 빠름

 

SYN 단점

  • 소스코드는 병합(merge)이 가능, 이진파일은 어느 한쪽을 버려야 함
  • 개별 개발자만의 개발 이력을 가질 수 X
  • .svn 디렉터리로 인해 저장소가 다소 지저분한 느낌을 줌
  • 잦은 커밋으로 리비전(개정 프로세스) 번호가 크게 증가할 수 있다
  • 충돌 확률 높음

 

Mercurial - 매트 맥컬

  • 현재 구글에서 이 시스템의 관리를 지원
  • Git과 기본 개념에서는 크게 다르지 않지만, 머큐리얼이 버전 관리 시스템에 필요한 모든 기능을 한 번에 통합 제공
  • -> 반면에 Git은 필요한 기능만 선택하여 사용함 
  • Python으로 개발됨
  • 명령어 대부분이 SVN과 공통으로 사용하는 부분이 많음
  • Git 과 달리 프로젝트의 커밋 내역을 변경 불가능한 것으로 다룸
  • 태그, 브랜치 등을 다루는 방식이 Git과 다르지만 큰 관점에서 대동소이

 

Git - 리누즈 토발즈

분산 버전 관리 시스템 중 하나

전 세계의 수많은 사용자가 사용

Git을 사용한 저장소로 공유 사이트인 GitHub

많은 사용자 수로 인해 무수한 듀토리얼과 프로젝트 존재

대중성과 안정성 때문에 많은 기업에서 버전 관리 시스템으로 채택

 

Git의 특징

  • master 저장소 서버, 클라이언트 저장소(master 저장소의 완전한 사본)로 구성
  • 로컬 및 원격 저장소 생성
  • 로컬 저장소에 파일 생성 및 추가
  • 수정 내역을 로컬 저장소에 제출
  • 파일 수정 내역 추적
  • 원격 저장소에 제출된 수정 내역을 로컬 저장소에 적용
  • Master에 영향을 끼치지 않는 브랜치 생성
  • 브랜치 사이의 병합
  • 브랜치를 병합하는 도중의 충돌 감지

Git의 장점

  • 모든 작업이 로컬에서 이루어지고 네트워크 사용은 원격 저장소로 저장할 때 한 번 이루어지므로 처리속도 빠름
  • 웹 상에 저장소를 둘 수 있기 때문에 언제 어디서나 협업 가능
  • 원격저장소의 내용이 모든 협업자들의 로컬 저장소에 저장이 되어 있으므로 원격저장소에 에러가 생겨도 로컬에서 복구하기 용이
  • 히스토리 관리가 잘 제공되어 있어 히스토리 관리가 용이

 

Git의 단점

  • 직관적이지 못하고 적응하는 데 시간 필요
  • 작업물을 원격저장소에 올리려면 우선 로컬 PC에서 작업내용을 Commit하여 로컬 저장소에 반영한 후
  • 원격저장소에서 fetch로 로컬저장소로 마스터 파일을 받아와서 충돌이 나지 않게 merge를 이용하여 합치고
  • 로컬 저장소의 내용을 Push하여 원격저장소에 올리면 그때 다른 사람들에게 나의 작업 내용이 공유

 

SVN vs Git

비교

https://needjarvis.tistory.com/803

SVN과 Git 차이점 

 

버전 관리 시스템 이해와 Git, SVN의 비교

버전 관리 시스템 개념(Version Control System) 버전 관리 시스템(Version Control System, VCS)은 파일의 변경 이력을 저장하고, 여러 사용자가 동시에 작업 및 협업할 수 있도록 돕는 소프트웨어 도구입니다.

needjarvis.tistory.com

 

'Open Source Software' 카테고리의 다른 글

OSS - 07_Git 고급  (0) 2024.04.21
OSS - 05_원격 저장소와 GitHub & Git  (0) 2024.04.14
OSS - 04_Git 설치 & 기본  (0) 2024.04.13
OSS - 02_OSS 활용  (0) 2024.04.02
OSS - 01_공개SW 라이선스  (0) 2024.03.31