Git 내부 구조에 대해서 알아보자 - Object

안지환·2023년 6월 6일
0

Git 사용법

목록 보기
2/6

⭐️ Overview

토스ㅣSLASH 22 - 잃어버린 개발자의 시간을 찾아서: 매일 하루를 아끼는 DevOps 이야기 토스팀에서 “레포지토리 복제를 어떻게 빨리 할 수 있을까?” 문제를 접근하는 방법을 보고 Git 내부구조는 어떻게 구성이 되었는지 궁금중이 생겨서 내용을 찾아보게 되었습니다.

ProGit 10장에 Git 내부 구조에 대해서 설명을 보고 간단한 실습을 통해서 Git의 내부구조에 대해서 알아보겠습니다.

Git Object(Object)란?

Git Object는 개체 데이터베이스를 의미합니다.

Git은 컨텐츠 주소 지정(content-addressable filesystem)이 가능한 파일 시스템입니다.

컨텐츠 주소 지정이 무엇일까요? 고정 데이터에 하드 디스크의 영구 위치에 할당하고 식별자 또는 주소로 지정되는 저장소의 메카니즘이라고 합니다.

키-값 데이터 저장소라고 생각합니다. Git 리포지토리에 삽입하고 해당 컨텐츠 내용을 검색하면 고유 키로 Git으로 돌려줍니다.

Git 내부구조 확인하기

Git 내부구조를 확인하기 위해서 간단하게 실습을 하겠습니다.

mkdir gittest 
cd gittest 
git init 
cd .git
ll

아직 디렉토리에 아무것도 없는 상태입니다. git init 명령어를 입력하면 git 내부에서 objects 디렉토리를 만들고 그 내부에는 packinfo 디렉토리가 생성이 됩니다.

echo 'git test' | git hash-object -w --stdin

git hash-objects 명령어를 사용해서 Git 데이터베이스에 새 데이터 개체를 저장 할 수 있습니다. 그리고 이 데이터에 접근 가능한 key를 반환합니다.

git hash-object 명령어가 출력하는 것은 40자 길이의 체크섬 해시입니다. 그 중 해시의 처음 두 글자를 따서 디렉토리 이름으로 사용하고 나머지 38글자를 파일 이름으로 사용합니다.

find objects -type f 
objects/f6/edd6e7a290f009aa685d3acd3153b495a69ea8
git cat-file -p <해시> // Git 객체 내용 살펴보기

README.md 파일을 추가하기

이번에는 README.md 파일을 생성해서 Git Hash 체크섬을 확인 하겠습니다.

vi README.md

vim 으로 README.md 파일을 생성하겠습니다. 파일을 저장합니다.

git status // 커밋 전 상태 확인 
git add .
git commit -m "README를 작성하라"

Git을 커밋을 합니다. 그 이후에 커밋을 되면 Git 레포지토리에 REAME가 저장이 되었습니다.

git rev-parse HEAD // 최신 커밋 해시값 확인 
bee7edf7d9cf47ce3148c58c49b7558f37ee3bc0

최신 커밋 해시값을 확인 하고 objects 폴더에 저장이 되었는지 확인합니다.

git cat-file -p bee7edf7d9cf47ce3148c58c49b7558f37ee3bc0 //해시값

find .git/objects -type f 명령어를 입력해서 objects 폴더에 저장되었는지를 확인합니다.

요약

Git 내부 구조 중 Objects 에 대해서 간단히 알아봤습니다.

  • Git은 Key-Value 데이터 저장소입니다.
  • Git 데이터 저장 시 데이터와 헤더를 SHA-1 체크섬으로 파일을 짓습니다.
  • 해시의 첫 두 글자를 따서 디렉토리 이름으로 사용하고 38글자를 파일 이름으로 사용합니다.

참조

profile
BackEnd Developer

0개의 댓글