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 가 필요한 이유
- 일부 파이만 커밋할 때
- 충돌을 수정할 때
- 커맷을 수정할 때