Git에 의해 관리되는 파일들의 가능한 상태(status)에 대해 다룬다.
working directory, staging area 등 'git의 공간' 개념과 '파일의 상태'를 서로 혼동하는 것에 주의해야 한다.
🙋 Working directory ?
단순하게 '현재 작업 중인 로컬 컴퓨터의 공간' 이라고 생각하면 된다.
Working directory
의 파일은 크게 Untracked
, Tracked
두 가지 상태로 나뉜다.
이 두 가지는 git
이 추적을 하냐, 안하냐에 따라 정해진다.
🙋 Tracked ? Untracked ?
먼저, Tracked
상태는 기존에 존재하던 파일에 수정이 일어나면 git
이 파일의 변경을 감지하고 사용자에게 알려준다. 이 때 파일의 변경 사항을 감지하여 추적하는 상태가 바로 Tracked
상태이다.
반대로, 파일을 새로 만들 경우 git
은 변경점을 찾을 비교군이 없기 때문에 파일을 추적하지 않는 상태가 된다. 이를 Untracked
상태라고 한다.
이러한 Untracked
상태를 git add
명령어를 통해 staging area로 추가해주면 Tracked
상태로 변하게 된다.
❗️ 한 번 git add
로 인해 git
의 추적 상태가 된 파일들은 더는 Untracked
상태가 되지 않는다. 때문에 .gitignore
파일에 ignore 시키고 싶은 파일 또는 폴더를 추가하여도 등록되지 않는 현상이 발생한다. 이는 cache에 해당 파일이 추적되어 있다고 등록되어 있기 때문에 해당 파일을 삭제하고 다시 생성하거나 혹은 cache를 삭제해준다.
# git rm 명령어
$ git rm --cached {파일이름} # 파일의 경우
$ git rm -r --cached {폴더경로} # 폴더의 경우
Tracked
상태의 파일들은 다시 크게 Unmodified
, Modified
, Staged
세 개의 상태로 나뉜다.
🙋 Staged ?
말 그대로 Staging area
에 존재하는 파일들의 상태를 staged
라고 한다.
즉, git add
를 통한 파일들의 상태는 staged
라고 보면 된다.
🙋 Unmodified ?
git이 추적하고 있지만, 변경되지 않은 파일들의 상태이다.
Staging area
에 있는 파일들을 git commit
하게 되면 하나의 commit
에 저장된다. 즉, 변경 이력을 로컬저장소에 남겼기 때문에 이 파일들은 staged
상태에서 Unmodifed
상태로 내려온다.
🙋 Modified ?
Unmodified
상태의 파일들이 다음 commit
전까지 파일들이 수정된다면, Modified
상태로 변경된다.
또 다시 git add
를 통한 staged
상태, git commit
을 통한 Unmodified
상태가 반복된다.
아래의 그림을 다시 보면 이해가 쉬워졌을 것이다.