Git에서는 우리가 작업하고 있는 폴더를 작업 트리(Work tree)라고 부릅니다. 그리고 커밋을 실행하기 전의, 저장소와 작업 트리 사이에 존재하는 공간을 인덱스(Index)라고 합니다.

Commit이 실제로 동작할 땐, Work tree에 있는 변경 내용을 저장소에 바로 기록하는 것이 아니라 그 사이 공간인 인덱스에 파일 상태를 기록하게 되어 있습니다. 인덱스에 파일 상태를 기록하는 것을 스테이징(Staging)이라 부릅니다. 따라서 저장소에 변경 사항을 기록할 때는, 기록하고자 하는 모든 변경 사항들이 인덱스에 존재해야 합니다.

10개의 파일을 수정했지만 7개만 저장소에 commit하고 싶다면, 해당 7개의 파일을 선택하는 작업이 스테이징 과정입니다. 이렇게 인덱스가 중간에 있는 덕분에 작업 트리 안에 있는 커밋이 필요 없는 파일들을 포함하지 않도록 조절할 수 있고, 원하는 일부 변경 사항만 인덱스에 등록해 커밋할 수 있습니다.

인덱스에 파일 상태를 기록하는 것을 Staging이라고 부르기 때문에, 인덱스는 Staging Area라고도 불립니다.

File Status Lifecycle

Work tree의 모든 파일은 Tracked(관리 대상)Untracked(관리 대상이 아님)으로 나뉩니다. Tracked 파일은 이미 한 번 이상 커밋되어 스냅샷에 포함돼 있던 파일입니다. Tracked 파일은 다시 Unmodified(수정하지 않음)Modified(수정함), 그리고 Staged(커밋하면 저장소에 기록되는) 상태 중 하나로 관리됩니다. 그리고 나머지 파일은 모두 Untracked 파일입니다. 따라서 Untracked 파일은 '추가' 단위로 관리되고, Tracked 파일은 삭제를 포함한 '수정' 단위로 git에서 관리됩니다. Untracked 파일이라는 개념을 이용해 특정 디렉토리나 파일을 Git의 관리 목록에서 제외(gitignore)할 수도 있습니다. 처음 저장소를 Clone하면 모든 파일은 Tracked이면서 Unmodified인 상태가 됩니다. 이와 같은 것들을 Git에선 File status lifecycle이라고 부릅니다.

'Git 레거시 글' 카테고리의 다른 글

[Git] 로컬 저장소 만들기  (0) 2018.05.18
[Git] 설치와 초기 설정  (0) 2018.05.17
[Git] 커밋(Commit)  (0) 2018.05.15
[Git] 저장소(repository)  (0) 2018.05.14
[Git] 개요  (0) 2018.05.13

+ Recent posts