Git 내부 구조 쉽게 이해하기
Git은 파일 시스템의 시간 여행자
Git은 소스 코드만 저장하는 도구가 아니라, 프로젝트의 모든 폴더와 파일의 상태를 사진처럼 기록합니다. 이렇게 하면 과거의 어느 시점이든 구조 전체를 복원할 수 있습니다.
파일 내용 전용 저장소: 블랍
Git에서는 각각의 파일의 순수한 내용만을 따로 블랍(blob)에 담아 보관합니다. 파일 이름이나 날짜 같은 정보 없이, 오직 데이터만 집중적으로 저장됩니다.
변하는 내용만 저장, 해시로 찾기
블랍은 SHA-1 방식의 긴 해시값(16진수 40글자)으로 식별합니다. 파일의 내용이 같으면 해시가 같고, 다르면 완전히 다른 해시가 생성됩니다.
폴더 구조를 통째로 관리하는 트리
트리(tree)는 디렉터리와 파일의 관계, 구조를 정리하는 역할을 합니다. 하나의 트리에는 여러 블랍이나 하위 트리를 포함할 수 있습니다. 트리 역시 고유한 SHA-1 해시로 식별합니다.
SHA-1 연결로 만드는 프로젝트 지도
트리 안의 각 파일이나 하위 폴더는 SHA-1 해시값을 사용해 연결됩니다. 파일이름이나 경로가 달라지면 트리의 구조와 해시도 달라집니다.
커밋: 구조, 기록, 시간의 혼합체
커밋(commit)은 전체 프로젝트의 구조(트리), 작업 히스토리, 메시지, 작성자, 시간, 부모 커밋까지 모두 담은 하나의 기록입니다. 이 역시 SHA-1 해시로 구분합니다.
불필요한 중복 없이 효율 저장
커밋할 때, Git은 변경된 파일만 새로 저장하고, 바뀌지 않은 데이터는 기존 객체의 해시값을 그대로 참조합니다. 덕분에 저장 용량을 아끼고, 최대한 효율적으로 운영합니다.
해시가 같을 때와 다를 때
파일의 내용이 일치한다면 어떤 환경에서든 블랍의 해시는 같습니다. 트리도 똑같은 구조로 연결되면 같은 해시가 나오지만, 커밋은 메시지 · 시간 · 작성자 등 부가정보 때문에 해시가 매번 달라집니다.
Git의 객체 세계 한눈에 보기
Git의 세계는 블랍(파일 내용), 트리(폴더 구조), 커밋(전체 히스토리) 세 가지로 간결하게 구성되어 있습니다. 각각은 해시값으로 구분되고, 바뀐 부분만 새 객체로 만들면서 효율적으로 관리됩니다.
출처 및 참고 :
