Git의 동작 개념



1. Git 의 3가지 작업 영역


작업 영역 설명
Working DIrectory - 이력 관리 대상(tracked) 파일들이 위치하는 영역
- 저장소 디렉터리에서 .git 폴더를 제외한 공간
- 작업 중인 파일이나 코드가 저장되는 공간
Staging Area - 이력을 기록할, 즉 커밋(commit)을 진행할 대상 파일들이 위치하는 영역
- .git 폴더 하위에 파일형태로 존재(index)
Repository - 이력이 기록된(committed) 파일들이 위치하는 영역
- .git 폴더의 이력 관리를 위한 모든 정보가 저장, 관리됨





Git은 파일이 추가되거나 수정될 때마다 그 변경 이력을 기록하기 위해 대상 파일을 이동시킨다. 처음에 파일들은 Working Directory 에 위치한 파일들이 수정되거나, 또는 여기에 새 파일이 추가되면, Git이 자동으로 변경 사항을 감지한다. 만약 사용자가 이 변경 사항을 기록하고 싶다면, 대상 파일을 선택하고 Staging Area로 이동시켜야 한다. 이러한 작업을 스테이징(Staging)이라고 부른다. 스테이징은 git add라는 명령을 사용해서 진행한다. 이력을 기록(저장)하려면 Staging Area 에 있는 파일들을 Repository라고 하는 공간으로 이동시켜야 마무리된다. 이 동작은 git commit 명령을 통해 실행 된다. 다시 말해 저장소 안 파일들의 수정, 추가 이력을 기록하기 위해 스테이징(git add)커밋(commit) 두 단계를 거쳐야 한다.



2. Git 이 관리하는 3가지 파일 상태


파일 상태 설명
Moditied - 관리 중인 파일에 수정(변경) 사항이 감지되었지만 커밋이 되지 않은 상태
Staged - 감지된 파일의 수정 사항이 Staging area로 이동한 상태
Commited(Unmodified) - 파일의 수정 사항에 대한 이력 저장이 완료된 상태





Working Diredctor에 새로운 파일이 추가된 상황을 예로 들 경우 저장소 입장에서는 그 파일이 기존 이력 관리 대상(추적, tracking)에 없다. 따라서 이파일이 처음 추가되었을 시점에서는 Untracked 상태이다. 새롭게 추가된 파일의 내역을 저장하기 위해 git add 명령으로 Staging Area에 이동시키면, 이파일은 Staged 상태가 된다. 그리고 Staging Area에 있는 파일에 대해서 git commit 명령을 내려야 비로소 이 파일의 추가 이력은 기록되고 Committed 상태가 된다. 이제 이 파일은 Git 의 관리 범주에 퐇람되었기 때문에 Tracked 이다. 그리고 모든 이력이 저장되었으므로 Unmmodified 상태이기도 한다. 만약 이 파일의 다시 수정된다면 Modified 상태로 변하게 된다. 이 변경 사항을 기록, 저장하려면 다시 Staged, Committed 과정을 거치게 되고 파일은 Unmodified 상태가 된다.


Staging Area 가 필요한 이유

  1. 일부 파이만 커밋할 때
  2. 충돌을 수정할 때
  3. 커맷을 수정할 때