Git은 분산 버전관리 시스템(DVCS) 이다.
깃은 보통의 버전 관리 시스템과는 다르게 데이터를 스냅샷의 스트림처럼 취급한다.
시간순으로 프로젝트의 스냅샷을 저장한다. 이러한 방식을 통한 이점은 다음과 같다.
Git은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리한다. 그래서 체크섬을 이해하는 Git 없이는 어떠한 파일이나 디렉토리도 변경할 수 없다. 체크섬은 GIt에서 사용하는 가장 기본적은(Atomic) 데이터 단위이자 Git의 기본 철학이다. Git 없이는 체크섬을 다룰 수 없어서 파일의 상태도 알 수 없고 심지어 데이터를 잃어버릴 수도 없다. Git은 해시값으로 저장한다.
Git으로 무얼 하든 GIt 데이터베이스에 데이터가 추가 된다. 되돌리거나 삭제할 방법이 없다.다른 VCS처럼 git도 커밋하지 않으면 변경사항을 잃어버릴 수 있다. 하지만 일단 스냅샷을 커밋하고 나면 데이터를 잃어버리기 어렵다.
GIt을 공부하기 위해 반드시 짚고 넘어가야 할 부분이다.
Git은 파일을 Commited, Modified, Staged 이렇게 세 가지 상태로 관리한다.
Git 디렉토리는 Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 말한다. 이 Git 디렉토리가 Git의 핵심이다. 다른 컴퓨터에 있는 저장소를 clone할때 Git 디렉토리가 만들어 진다.
워킹 트리는 프로젝트의 특정 버전을 Checkout 한 것이다. Git 디렉토리는 지금 작업하고 디스크에 있고 그 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와서 워킹 트리를 만든다.
Staging Area는 Git 디렉토리에 있다. 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장한다. Git에서는 기술용어로는 index라고 하지만, Staging Area라는 용어를 써도 상괍없다.
Git으로 하는 일은 기본적으로 아래 와 같다.