Git의 데이터 관리
스냅샷
- Git은 데이터를 파일 시스템 스냅샷의 연속으로 취급하고 크기가 아주 작다.
- Git은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다.
- 파일이 달라지지 않았으면 Git은 성능을 위해서 파일을 새로 저장하지 않는다.(이전 상태의 파일에 대한 링크만 저장한다.). Git은 데이터를 스냅샷의 스트림처럼 취급한다.
거의 모든 명령을 로컬에서 실행
- 프로젝트의 모든 히스토리가 로컬 디스크에 있기 때문에 모든 명령이 순식간에 실행된다.
-> Git은 프로젝트의 히스토리를 조회할 때 서버 없이 조회한다.
-> 로컬 데이터베이스에서 히스토리를 읽어서 보여 준다. (빠른 속도)
-> 파일을 비교하기 위해 Remote에 있는 Server에 접근하고 나서 예전 Version을 가져올 필요가 없다.
Git의 무결성
- Git은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리한다.
- Git은 SHA-1 해시를 사용하여 체크섬을 만든다.
(만든 체크섬은 40자 길이의 16진수 문자열이다.)
SHA-1 Ex) 24b9da6552252987aa493b52f8696cd6d3b00373
- 실제로 Git은 파일을 이름으로 저장하지 않고 해당 파일의 해시로 저장한다.
세 가지 상태
- Committed
: 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것
- Modified
: 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것
- Staged
: 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태
※ Git Directory
: Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 말한다.
다른 컴퓨터에 있는 저장소를 Clone할 때 Git 디렉토리가 만들어진다.
※ Working Tree
: 프로젝트의 특정 버전을 Checkout 한 것이다. Git 디렉토리는 지금 작업하는 디스크에 있고 그 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와서 Working Tree를 만든다.
※ Staging Area
Git 디렉토리에 있다. 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장한다. Git에서는 기술용어로는 Index'' 라고 하지만, Staging Area라는 용어를 써도 상관 없다.
※ Git이 기본적으로 하는 일
1. Working Tree에서 파일을 수정한다.
2. Staging Area에 파일을 Stage해서 Commit할 스냅샷을 만든다. 모든 파일을 추가할 수도 있고 선택하여 추가할 수도 있다.
3. Staging Area에 있는 파일들을 Commit해서 Git Directory에 영구적인 스냅샷으로 저장한다.
Git 디렉토리에 있는 파일들은 Committed 상태이다. 파일을 수정하고 Staging Area에 추가했다면 Staged이다. 그리고 Checkout하고 나서 수정했지만, 아직 Staging Area에 추가하지 않았으면 Modified이다.