이 글은 Git 공식 문서를 통해 배운 것을 정리한 내용입니다.
버전 관리란?
-
버전 관리 시스템
은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다. -
버전 관리 종류에는 로컬 버전 관리, 중앙집중식 버전 관리(CVCS), 분산 버전 관리 시스템이 있다.
- 참고) VCS = Version Control System, 버전 관리 시스템
로컬 버전 관리
- 로컬 버전 관리 시스템은 아주 간단한 데이터베이스를 사용해서 파일의 변경 정보를 관리했다.
-
많이 쓰는 VCS 도구 중에 RCS(Revision Control System)라고 오늘날까지도 아직 많은 회사가 사용하고 있다.
-
RCS는 기본적으로 Patch Set(파일에서 변경되는 부분)을 관리한다. 이 Patch Set은 특별한 형식의 파일로 저장한다.
-
그리고 일련의 Patch Set을 적용해서 모든 파일을 특정 시점으로 되돌릴 수 있다.
중앙 집중식 버전 관리(CVCS)
-
팀 프로젝트를 진행할 때 다른 개발자와 함께 작업을 해야 하는 경우
CVCS
를 사용한다. -
CVCS
는 파일을 관리하는 서버가 별도로 있고 클라이언트가 중앙 서버에서 파일을 받아서 사용(Checkout)한다.
-
CVCS는 로컬 VCS에 비해 장점이 많다.
-
모두 누가 무엇을 하고 있는지 알 수 있다.
-
관리자는 누가 무엇을 할지 꼼꼼하게 관리할 수 있다.
-
모든 클라이언트의 로컬 데이터베이스를 관리하는 것보다 VCS 하나를 관리하는게 훨씬 쉽다.
-
-
하지만 이 CVCS 환경에는 몇 가지 치명적인 단점이 있다.
-
가장 대표적인 것이 중앙 서버에 발생한 문제다. 만약 서버가 한 시간 동안 다운되면 그동안 아무도 다른 사람과 협업할 수 없고 사람들이 하는 일을 백업할 방법도 없다.
-
그리고 중앙 데이터베이스가 있는 하드디스크에 문제가 생기면 프로젝트의 모든 히스토리를 잃는다.
분산 버전 관리 시스템
-
DVCS
(분산 버전 관리 시스템)에서의 클라이언트는 단순한 파일의 마지막 스탭샷을 Checkout 하지 않고 저장소를 히스토리와 더불어 전부 복제한다. -
서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있다.
-
클라이언트 중에서 아무거나 골라도 서버를 복원할 수 있다.
Clone
은 모든 데이터를 가진 진정한 백업이다.
-
그리고 대부분의 DVCS 환경에서는 리모트 저장소가 존재한다.
-
그래서 다양한 그룹과 다양한 방법으로 협업할 수 있다. 중앙집중식 시스템에서 할 수 없는 Workflow를 다양하게 사용할 수 있다.
짧게 보는 Git의 역사
-
Linux 창시자 Linux Torvalds가 자체적으로 만든 것이
Git
이다. -
Git은 다음과 같은 특징을 가지고 있다.
-
빠른 속도
-
단순한 구조
-
비선형적인 개발(수천 개의 동시 다발적인 브랜치)
-
완벽한 분산
-
Linux 커널 같은 대형 프로젝트에도 유용할 것
-
-
Git은 2005년에 탄생하고 아직도 초기 목표를 그대로 유지하고 있다.
-
그러면서도 사용하기 쉽게 진화하고 성숙했다.
-
Git은 동시다발적인 브랜치에도 끄덕없는 슈퍼 울트라 브랜칭 시스템이다.
Git 기초
- Git은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다.
- 성능을 위해서 파일이 달라지는 경우에만 새로 저장한다. Git은 데이터를 스냅샷의 스트림처럼 취급한다.
세가지 상태
-
Git은 파일을 다음과 같이 세 가지 상태로 관리한다.
-
Committed
: 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미한다. -
Modified
: 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않는 것을 말한다. -
Staged
: 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다.
-
-
이 세 가지 상태는 Git 프로젝트의 세 가지 단계와 연결되어 있다.
-
Git directory
는 Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 말한다. 이.git directory
가 Git의 핵심이다.- 다른 컴퓨터에 있는 저장소를 Clone할 때
Git directory
가 만들어진다.
- 다른 컴퓨터에 있는 저장소를 Clone할 때
-
Working tree
는 프로젝트의 특정 버전을 Checkout 한 것이다.Git directory
안에 압축된 데이터베이스에서 파일을 가져와서 Working tree를 만든다. -
Staging area
는 Git directory 안에 있다. 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장한다. Git에서 기술용어로Index
라고도 한다. -
Git에서 기본적으로 하는 일은 아래와 같다.
-
Working tree에서 파일을 수정한다.
-
Stating area에 있는 파일을 Stage 해서 커밋할 스냅샷을 만든다.
-
Stating area에 있는 파일들을 커밋해서 Git directory에 영구적인 스냅샷으로 저장한다.