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 해시로 식별됨

 

 

git 만들기

 

구현 과정

1. 입력 모듈

2. init 명령어 수행

3. add 명령어 수행

4. status 명령어 수행

5. commit blob Object

6. commit tree Object

7. commit commit Object

8. commit 명령어 수행

 

실행 영상

 

 

 

 

 

 

 

 

728x90