[Git] git의 내부 동작 원리

Git 시나리오 정리

Git은 코드의 변경 이력(형상)을 관리하는 분산 버전 관리 시스템입니다.
내부적으로는 다음 3가지 주요 영역으로 구성되어 동작합니다:

  • 작업 디렉토리 (Working Directory)
    사용자가 실제로 파일을 수정하는 공간입니다.

  • 스테이징 영역 (Staging Area / Index)
    커밋할 내용을 임시로 저장하는 공간입니다.

  • 로컬 저장소 (Local Repository)
    커밋이 영구적으로 저장되는 .git 내부의 영역입니다.


1. git add – 인덱스에 스냅샷 저장

git add 명령은 변경된 파일을 스테이징 영역(Index) 에 추가합니다.

이때 Git은 다음과 같은 작업을 수행합니다:

  • 변경된 파일 내용을 기반으로 블롭(blob) 객체를 생성합니다.
  • 파일 트리 구조를 반영한 트리(tree) 객체를 생성합니다.
  • 각 객체는 SHA-1 해시를 통해 식별됩니다.
  • 이 트리 구조는 Git 내부의 인덱스 파일에 기록되어 다음 커밋을 위한 스냅샷을 구성합니다.

즉, git add는 현재 상태의 논리적 스냅샷을 트리 형태로 인덱스에 저장하는 작업입니다.


2. git commit – 커밋 객체 생성 및 버전 기록

git commit 명령은 인덱스에 저장된 트리 구조를 기반으로 커밋 객체(commit object) 를 생성합니다.

커밋 객체는 다음 정보를 포함합니다:

  • 트리 객체의 해시 (스냅샷 정보)
  • 이전 커밋의 해시 (부모 커밋 정보)
  • 작성자 및 커밋 시간
  • 커밋 메시지

생성된 커밋 객체는 고유한 SHA-1 해시값을 갖고 .git/objects/a6 디렉토리에 저장됩니다.


3. Git 저장소 초기화와 clone

  • Git 저장소를 git init이나 git clone으로 생성하면 .git 디렉토리가 생기며, 로컬 저장소로 작동합니다.
  • 이 시점부터는 Git이 모든 파일의 변경 사항을 작업 디렉토리에서 추적하게 됩니다.

4. GitHub으로 push

  • commit까지 완료하여 로컬 저장소에 생성된 버전을 GitHub에도 저장합니다.