Git 내부 구조는 어떻게 생겼을까?

728x90

git 내부 구조

기본 오브젝트

blob

  - 타입 : blob 타입

  - 사이즈 : 컨텐츠의 용량을 bytes로 표시

  - 컨텐츠 : 다양한 형식의 파일 저장(텍스트, 이미지, 음악, 이진 파일)

: 파일 이름, 파일 형식은 저장되지 않고, 파일의 메타정보를 제외한 파일의 내용 전체를 저장

: 각 파일의 내용은 고유한 Blob 오브젝트로 저장

: 각각의 고유한 SHA-1 해시를 가지고 있음

 

tree

  - 타입 : tree 타입

  - 사이즈 : 트리 오브젝트의 용량을 bytes로 표시

  - tree 객체 : 하위 디렉토리의 트리 객체를 재귀적으로 참조

  - blob 객체 : 한 디렉토리에 있는 모든 blob을 담음

: 객체에 대한 접근 권한, 파일 이름 관리

: 디렉토리 내 파일들을 blob 오브젝트로, 그리고 하위 디렉토리들을 다른 tree 오브젝트로 참조하여 디렉토리의 구조를 표현

 

commit

  - 작성자

  - 커밋 실행자

  - 커밋 날짜

  - 로그 메시지 

  - tree 객체 : 해당 커밋에서의 dir / file 상태

: 프로젝트의 특정 시점을 나타냄

: 디렉토리와 파일 내용은 tree 오브젝트를 통해 참조

 

tag

  - 객체 종류

  - 태그 이름

  - tagger

  - 태그 메시지

  - PGP 서명 정보

: 보통 릴리즈 버전을 표시할 때 사용

: 특정 commit 오브젝트를 참조하여 해당 버전의 프로젝트 상태를 쉽게 찾을 수 있음

 

동작 절차

Git Repository 파일이 변경되면, 상태를 기억하는 새 blob 객체를 생성

파일이 스테이징 영역에 추가(git add)되면, Git은 디렉토리의 현재 상태를 나타내는 새 tree 객체를 생성

변경 사항이 커밋되면 Git 은 새 commit 객체를 생성, 생성된 commit 객체는 이전 단계에서 만든 tree 오브젝트를 가리킴

태그는 나중에 쉽게 참조할 수 있도록 특정 커밋을 표시하기 위해 언제든지 만들 수 있음, 태그가 생성되면 Git은 새 태그 객체를 생성

모든 객체는 모두 Git Repository의 .git/objects 디렉토리에 저장, 태그는 오브젝트의 콘텐츠를 기반으로 하는 고유 식별자인 SHA-1 해시로 식별됨

 

 

 

 

 

 

 

 

 

728x90