Git은 데이터를 스냅샷의 스트림으로 취급하고 크기가 아주 작다. 파일이 달라지지 않았으면 Git은 파일을 새로 저장하지 않는다. 단지 이전 상태의 파일에 대한 링크만 저장한다.
![[01-01.png]]
Git은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리한다. 체크섬은 Git에서 사용하는 가장 기본적인(Atomic) 데이터 단위이자 Git의 기본 철학이다.
Git은 SHA-1 해시를 사용하여 체크섬을 만든다. 만든 체크섬은 40자 길이의 16진수 문자열이다. 파일의 내용이나 디렉토리 구조를 이용하여 체크섬을 구한다. 실제로 Git은 파일을 이름으로 저장하지 않고 해당 파일의 해시로 저장한다.
Git으로 무얼 하든 Git 데이터베이스에 데이터가 추가된다. 되돌리거나 삭제할 방법이 없다.
Git은 파일을 Committed
, Modified
, Staged
이렇게 세 가지 상태로 관리한다.
- Committed: 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 의미
- Modified: 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 의미
- Staged: 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미
![[01-02.png]]
- Git Directory: 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳
- Working Directory(= Working Tree): 프로젝트의 특정 버전을 Checkout 한 것.
- Staging Area(= Index): 단순한 파일로 곧 커밋할 파일에 대한 정보를 저장한다.
- Working Tree에서 파일을 수정한다.
- 파일을 Staging Area에 올려서(Stage) 커밋할 스냅샷을 만든다.
- Staging Area에 있는 파일들을 커밋해서 Git Directory에 영구적인 스냅샷으로 저장한다.