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 명령어 수행
실행 영상