개발자라면 플랫폼은 달라도 대부분 Git
을 이용해서 협업 및 버전 관리를 할 것으로 생각한다.
그만큼 자주 사용하는 프로그램이기 때문에 Git
을 좀 더 이해하기 위해서 Git
의 기본 구조와 파일의 상태에 대해 다뤄보려고 한다.🙂
Git
은 working directory
, staging area
, repository
의 세 영역으로 구분되어 있다.
working directory
는 말 그대로 현재 작업 중인 공간을 의미한다.
working directory
에 있는 파일들은 tracked
상태 혹은 untracked
상태를 가지게 되는데, 파일의 상태에 대한 자세한 설명은 아래에서 다시 하도록 하겠다.
staging area
는 index
라고도 불리는데, working directory
의 파일 중에서 repository
에 저장할 파일을 임시로 보관하는 영역이다.
git add
명령을 사용하면 파일을 working directory
에서 staging area
로 올리게 되는데, 이동이 아니라 복사를 한다는 사실을 기억하자!😠
이 뜻은 파일을 git add
명령을 이용해서 staging area
에 올렸다면, 그 뒤에 해당 파일을 수정하더라도 다시 git add
를 하지 않는다면 해당 내용이 commit
에 반영되지 않는다는 의미다.
staging area
에 있는 파일들을 git commit
명령을 이용해서 repository
에 저장하게 된다.
commit
을 통해 저장된 내용은 물리적으로 git init
명령을 통해 생성된 .git
폴더에 저장하기 때문에, 실수로 .git
폴더를 지워버리면 해당 프로젝트의 로그가 사라지게 되니 조심하도록 하자!🙂
위에서 설명한 Git
의 구조와 아래의 파일 상태까지 이해하면, Git
의 전체적인 흐름을 이해하는데 도움이 많이 된다!😃
Untracked
상태의 파일은 말 그대로 Git
이 추적하고 있지 않은 상태다.
보통 파일을 처음 추가하고 git add
명령으로 staging area
에 올리지 않았다면 갖게되는 상태다.
이 상태의 파일을 staging area
에 한 번이라도 올리게 된다면, 의도적으로 cache를 제거하지 않는 한 tracked
상태를 유지하게 된다.
Tracked
상태는 Git
이 해당 파일의 변동을 추적하고 있는 상태다.
Tracked
상태의 파일은 Tracked
외에도 다양한 상태를 가질 수 있는데, 아래에서 자세히 설명하겠다!
Staged
상태는 해당 파일이 staging area
에 올라가 있는 상태를 말한다.
파일이 한 번이라도 staging area
에 올라가게 되면 tracked
상태를 유지하므로, staged
상태의 파일은 동시에 tracked
상태이기도 하다.
기본적으로 새로 생성한 파일은 위의 세 가지 상태를 가지게 된다.
staging area
에 있던 파일을 commit
하게 되면, tracked
상태의 파일이 staged
상태가 되기 전에 두 가지 상태를 가지게 된다.
사실상 Modified
하나만 알아도 무방하지만, 그래도 분리해놨다 ㅎㅎ..;😅
commit
이후에 Git
이 추적하고 있는 파일, 즉 tracked
상태의 파일이 수정되지 않으면, unmodified
상태를 가지게 된다.
파일의 내용이 변하지 않았기 때문에 commit
의 대상이 되지 않는다.
Git
이 추적하고 있는 tracked
상태의 파일의 내용이 수정되면, modified
상태를 가지게 된다.
파일의 내용이 변했기 때문에 git add
명령을 이용해서 다시 staging area
에 올려줘야 commit
이 가능하다.
여기까지 Git
의 기본적인 구조와 파일의 상태에 대해 알아보았다.
위에서 설명한 내용을 몰라도 Git
을 사용하는 데 딱히 지장은 없으나, 알고 있으면 Git
이 어떻게 동작하는지 흐름을 제대로 파악할 수 있다고 생각해서 정리해봤다.😋