git

Understanding Git Structure: Working Tree, Stage Area, Local Repository

Git을 처음 배우는 사람이라면 “워킹 트리(Working Tree)”나 “스테이징 영역(Stage Area)” 같은 용어가 낯설게 느껴질 수 있습니다. 하지만 이 개념들을 이해하면 Git이 내부적으로 어떻게 파일을 관리하고 버전을 기록하는지 훨씬 명확하게 알 수 있습니다. 이번 글에서는 Git의 기본 구조를 이루는 세 가지 핵심 영역 — Working Directory, Stage Area, Local Repository(.git directory) — 그리고 이를 아우르는 개념인 Working Tree에 대해 알아봅시다.


Working Tree란

Working Tree는 Git이 관리하는 전체 작업 영역을 의미합니다. 이 안에는 세 가지 주요 구역이 존재합니다.

  1. Working Directory (작업 디렉토리)
  2. Stage Area (스테이징 영역)
  3. .git Directory (로컬 저장소)

이 세 영역이 서로 유기적으로 연결되어, 우리가 작성한 코드가 원격 저장소(GitHub 등)에 올라가기 전까지의 모든 과정을 관리합니다. 즉, Working Tree는 Git이 추적하는 파일과 그렇지 않은 파일을 구분하고, 추적 중인 파일의 상태를 관리하는 공간이라고 할 수 있습니다. 우리가 개발 중인 코드를 작성하고, 수정하고, 버전으로 남기기 전까지의 모든 작업은 이 워킹 트리 안에서 일어납니다.


Working Directory

Working Directory는 개발자가 실제로 작업하는 공간으로, 우리가 직접 코드를 작성하고 편집하는 영역입니다. 아직 Git에 의해 변경 사항이 기록되지 않은 상태로, 순수하게 로컬 환경에서 작업 중인 파일들이 존재합니다.

이 단계에서는 Git이 어떤 파일을 추적할지, 어떤 파일은 무시할지를 설정할 수 있습니다. 예를 들어, git add 명령어를 사용하기 전까지는 파일이 단순히 워킹 디렉토리 안에만 존재하며, Git은 해당 파일을 아직 “관리 대상”으로 인식하지 않습니다.

정리하자면, Working Directory는 ‘코드를 작성하는 공간’이자 Git 버전 관리의 출발점이라 할 수 있습니다.


Stage Area

Stage Area(스테이징 영역)는 커밋(Commit) 전의 임시 저장 공간입니다. Working Directory에서 수정된 파일 중 일부만 선택해 Git에 기록하고 싶을 때, 작업 단위를 세분화하여 관리할 수 있습니다. "A"기능과 "B"기능을 동시에 작업했더라도 "A"기능한 커밋으로 올리는 것이 가능합니다.

즉, Stage Area는 “무엇을 기록할지 선택하는 공간”이자 “작업의 경계를 구분하는 단계”입니다.


Local Repository (.git Directory)

Stage Area에 올린 파일들은 이제 커밋(Commit) 명령을 통해 Local Repository, 즉 .git 디렉토리에 저장됩니다. 이 로컬 저장소는 Git 프로젝트의 모든 버전 이력과 변경 기록을 담고 있는 중추적인 데이터베이스입니다.

커밋이 이루어지는 순간, Stage Area에 있던 내용이 영구적으로 로컬 저장소에 기록됩니다. 이후 우리가 git push 명령어를 통해 원격 저장소로 업로드하기 전까지는 이 영역에서 안전하게 관리됩니다.

즉, Local Repository는 원격 저장소로 올리기 직전의 마지막 단계이며, 커밋을 통해 코드의 버전이 완성되는 지점입니다. 이후 원격 저장소(GitHub, GitLab 등)로 업로드하면 다른 개발자들과 공유하거나 협업이 가능해 집니다.


정리

Working Directory → Stage Area → Local Repository → Remote Repository로 이어지는 흐름을 이해하면, “지금 내가 어떤 상태에서 작업 중인지” “어떤 파일이 추적되고 있는지”를 명확히 알 수 있습니다. 정리하면 아래와 같습니다.

  • Working Directory: 코드를 작성하는 공간
  • Stage Area: 커밋할 파일을 고르는 임시 공간
  • Local Repository: 커밋된 버전이 저장되는 공간
  • Working Tree: 이 모든 과정을 포괄하는 전체 구조

reference