.git의 폴더 안에는 여러가지 파일들이 있다
이러한 파일들의 역할들을 보다 편하게 알기 위해 이 강의에서는 gitstory를 사용한다.
작업 디렉토리상의 변경이 이루어진 상태에서 add 명령어가 아직 수행되지 않았을 경우에는 .git폴더상에서는 아무런 변화가 없다.
add명령어가 실행되면 index파일이 변경되며 Objects폴더에 새로운 파일이 추가된다.
파일이 SHA-1을 통해 만들어진 체크섬이며 이 경로는 40자 길이의 16진수로 만들어진다. 앞의 두자리는 Object 디렉토리의 새로운 폴더명이 되며, 마지막 38자리는 파일명이 된다.해쉬값의 이름을 가진 파일의 내용은 add시킨 파일의 내용이 담기게된다. index 파일은 변경된 파일명과 함께 해쉬파일을 참조한다.
새로운 파일을 추가하면 마찬가지로 index파일에 새로운 버전을 가진 해쉬태그를 참조하는 파일명이 새롭게 갱신이 되며, 오브젝트폴더에 add한 파일이 해쉬값의 파일명으로 저장된다.
그런데 똑같은 파일을 만들고 add하면 object폴더에 새로운 파일이 추가되지 않는다. 해쉬변환기로 돌린 파일이 object폴더에 이미 존재하면 똑같은 파일을 새로 만들지 않고 해당 파일을 참조하게 된다. 이로써 git은 기존의 버전관리 시스템과는 다르게 아주 효율적인 구조를 가지고 있다고 볼 수 있다. 깃은 데이터를 스냅샷으로 취급되기때문에 중복될 일이 없어 대형프로젝트에 도입하면 크기가 매우 줄어든다.