반응형
Git의 작업 메커니즘
Git이 정교하고 복잡한 작업(예: 브랜치 간 차이 비교, 변경 추적, 되돌리기 등)을 수행할 수 있는 이유는, Git 내부에 데이터를 저장하고 비교하는 독특한 메커니즘이 존재하기 때문입니다. 그 핵심 메커니즘을 이해하면 Git의 능력이 왜 탁월한지 쉽게 이해할 수 있습니다.
✅ Git이 복잡한 작업을 가능하게 하는 핵심 메커니즘
1. 🔐 스냅샷 기반 저장 (Snapshot Model)
- Git은 변경 내용을 기록할 때, 파일 전체의 스냅샷을 저장합니다.
- 매 커밋마다 전체 프로젝트의 상태를 저장하지만, 변경되지 않은 파일은 이전 스냅샷을 참조하므로 저장 공간을 효율적으로 사용합니다.
- 즉, **차이(diff)**가 아니라, **그 순간의 전체 상태(스냅샷)**가 기록됩니다.
커밋 A → 커밋 B → 커밋 C
↓ ↓ ↓
스냅샷 A 스냅샷 B 스냅샷 C
2. 🧬 SHA-1 해시 기반의 데이터 구조
- Git의 모든 객체(커밋, 트리, 블롭 등)는 고유한 SHA-1 해시로 식별됩니다.
- 이 해시는 내용 기반이므로 내용이 바뀌지 않으면 해시도 바뀌지 않습니다.
- 이를 통해 Git은 정확하고 빠르게 변경 여부를 감지할 수 있습니다.
예:
git hash-object file.txt
이 명령으로 파일의 해시를 직접 확인할 수 있습니다.
3. 🌲 트리(Tree)와 블롭(Blob) 구조
- Git 내부는 리눅스의 파일시스템처럼 동작합니다:
- 블롭 (blob) = 파일의 실제 내용
- 트리 (tree) = 폴더와 파일의 목록 및 구조
- 커밋 (commit) = 하나의 트리를 가리키고, 메시지·작성자·이전 커밋 등을 포함
commit
└── tree
├── file1 (blob)
├── file2 (blob)
└── subdir (tree)
└── file3 (blob)
4. 🧠 브랜치와 머지 (Branch & Merge) 전략
- 브랜치는 단순히 커밋의 포인터입니다.
- Git은 브랜치를 새로 만들거나, 병합(merge)하는 것이 매우 가볍고 빠릅니다.
- git diff는 두 커밋 간 트리 구조를 비교하여 차이를 계산합니다.
git diff branch1..branch2
→ branch1이 가리키는 트리 vs. branch2가 가리키는 트리를 비교
5. 🕹️ 변경 이력 추적과 되돌리기 (Reflog, Reset, Revert)
- Git은 HEAD의 이동 이력까지 추적합니다 (git reflog).
- 실수로 브랜치나 커밋을 되돌려도 되살릴 수 있는 구조가 내장되어 있습니다.
✅ 정리: Git이 가능한 이유
요소 | 기능 |
스냅샷 저장 | 파일의 상태를 전체 저장하여 비교와 복구가 쉬움 |
SHA-1 해시 | 내용 추적 및 변경 감지를 정확하게 처리 |
트리/블롭 구조 | 폴더 및 파일 구조를 효율적으로 관리 |
브랜치 = 포인터 | 빠르고 가벼운 브랜치 관리 가능 |
이력 추적 | 실수도 되돌릴 수 있는 강력한 복구 기능 |
📌 비유
Git은 “파일 백업기”가 아니라,
“파일 시스템 전체의 시간 여행 머신”이라고 보면 됩니다.
'리눅스 > 리눅스 응용' 카테고리의 다른 글
NCP 마켓플레이스용 Application Image 만들기 (2) | 2025.08.10 |
---|---|
Git 환경을 확인하는 방법 (0) | 2025.06.27 |
[삼바서버] /srv 디렉터리의 의미와 역할 (7) | 2025.02.01 |
리눅스에서 Samba 서버 설치 및 설정 가이드 (7) | 2025.01.31 |
네트워크 상에서 디렉터리 서비스 관리, LDAP (3) | 2025.01.30 |