[Git 저장소] .git 디렉토리 구조

조아·2025년 4월 1일
0

0. .git 디렉토리란?

  • Git이 프로젝트의 버전 관리를 위해 사용하는 숨겨진 디렉토리
  • Git 저장소의 핵심 데이터를 담고 있음.

1. .git 디렉토리 생성

git init

.git 디렉토리가 생성되며, 해당 프로젝트는 Git 저장소가 된다.


2. .git 디렉토리 주요 구성 요소

핵심 디렉토리/파일 설명

objects/
  • Git의 모든 데이터(커밋, 파일, 디렉토리)는 객체(object) 로 저장되고, 이 객체들이 이 디렉토리에 해시값 기반으로 저장됩니다.
  • 예: objects/ab/cdef1234... 형태
refs/
  • 브랜치(refs/heads/), 태그(refs/tags/), 리모트 브랜치(refs/remotes/)가 여기에 저장됨
  • 각 파일에는 해당 참조가 가리키는 커밋의 해시가 저장됨
index
  • 커밋 전에 Git이 파일 상태를 추적하는 스테이징 영역
  • 커밋은 항상 이 인덱스를 기반으로 만들어짐
  • 현재 체크아웃된 브랜치 or 커밋을 가리키는 포인터
    • 브랜치일 경우: ref: refs/heads/main
    • detach 상태일 경우: 커밋 해시 직접 저장
hooks/
  • 커밋, push, merge 전후로 자동 실행되는 스크립트를 설정할 수 있는 곳
    • 예: pre-commit, post-merge, pre-push

3. 커밋 생성 후 구조 살펴보기

echo "hello git" > hello.txt
git add hello.txt
git commit -m "첫 커밋"

ls -al .git 명령어로 확인하면 다양한 파일과 폴더가 생성된 것을 볼 수 있다.


4. 커밋 해시와 Git 객체 구조

git log --oneline

출력된 커밋 해시 값은 .git/objects/ 디렉토리에 저장된 Git 객체 중 하나이다. Git은 커밋, 파일, 디렉토리를 객체로 저장하며, 이 객체는 해시 기반 디렉토리 구조로 보관된다.

ls .git/objects/<해시 앞 두 자리>

객체 내용 확인:

git cat-file -p <커밋 해시>

해당 명령어를 통해 커밋 객체의 내부를 확인할 수 있다. 내용에는 트리 객체, 작성자, 메시지 등이 포함된다.


5. HEAD와 브랜치 참조

cat .git/HEAD
# ref: refs/heads/master

cat .git/refs/heads/master
# <커밋 해시>

.git/HEAD는 현재 체크아웃된 브랜치를 가리킨다. 해당 브랜치가 가리키는 커밋은 .git/refs/heads/ 하위에 저장된다.


6. Git의 내부 동작 요약

  • index: 커밋 전 단계, 스테이징 영역 역할
  • objects: Git이 실제 데이터를 저장하는 영역. 압축된 blob, tree, commit 등의 객체로 구성
  • refs: 브랜치나 태그 이름이 가리키는 커밋 정보를 저장
  • HEAD: 현재 작업 중인 브랜치 또는 커밋 위치를 기록
profile
프론트엔드 개발자

0개의 댓글