지옥에서 온 Git (2)
git add의 원리
- 모든 file의 이름은 index에 담겨 있음
- 각각의 file 내용은 object에 담겨 있음
- Git에서는 file의 이름이 달라도 같은 내용을 담고 있는 경우, 같은 object를 참조(하단 설명 참고)
objects 파일명의 원리
- Git은 파일의 내용을 기반으로 object 파일의 이름을 생성
- 이는 중복 데이터를 저장하는데 매우 효율적으로 작동
- 같은 내용을 가진 파일에 대한 object를 생성하지 않기 때문
- 파일의 내용 + additional information으로 이루어진 값을 "sha1"에 통과시키기 때문에 같은 내용을 지닌 파일은 결국 같은 object명 사용하게 됨
commit의 원리
- commit message 또한 object화 되어 생성됨
- commit message에는 현재 version이 참조하는 object들이 tree 형태로 담겨 있음(각각의 버전에 대한 Snap shot)
- 최초 commit 이후에는 parent commit을 제공하며, 이는 이전 version의 commit message를 참조
- local에서의 폴더 정보 역시 'tree' 자료형으로 저장됨
- 즉, object는 tree(directory), blob(file), commit(commit message) 중에 하나의 자료형을 가짐
status의 원리
- index 내 파일들과 local 파일들을 비교하여 add 필요 여부 판단
- index 내 파일들과 최신 commit message의 tree 내 파일들의 차이를 비교하여 commit 대기 상태 여부 판단