[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에도 저장합니다.