Git을 공부하는 데 있어서 파일의 세 가지 상태와 세 개의 directory를 이해하는 것은 중요하다.
그래야 다른 것들을 이해하기 수월하다.
다른 블로그들에서도 이해하기 편한 것들이 많지만, 공부하면서 새롭게 알게 된 것들도 있기 때문에 블로그를 작성해보았다.
조금 더 간단한 설명을 원한다면 아래 블로그를 참고하는 게 더 좋을 수 있다.
https://anerim.tistory.com/203
[깃 Git] git의 영역 정리(working directory, staging area, repository) / git의 상태 정리(untraked, tracked, staged, un
안녕하세요. 디자인도 하고, 개발도 하는 '디발자 뚝딱'입니다. 이번 포스팅에서는 working directory, staging area, repository의 개념을 정리해보겠습니다. 개발자라면 이 3가지 영역을 잘 이해해야 Git을
anerim.tistory.com
파일의 세 가지 상태
Git 공식문서에서는 다음과 같이 말한다.
Git은 파일을 크게 세 가지 상태로 관리한다.
- Committed란 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미한다.
- Modified는 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 말한다.
- Staged란 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다.
출처: https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EA%B8%B0%EC%B4%88
Git의 세 가지 영역
앞서 설명한 Git에서 파일을 취급하는 세 가지 상태는 이 그림에서 말하는 세 영역과 깊은 연관성이 있다.
먼저, 세 영역의 개념을 먼저 보자.
- working directory : 내가 작업하고 있는 폴더.
- Staging area : 어떤 것을 commit할 지에 정보를 저장하고 있는 파일. 하지만, 그냥 공간이라고 이해하는 편이 낫다.
- .git directory : 프로젝트의 metada와 object database를 Git이 저장하고 있는 공간.
그러면 이제 위의 세 가지 상태와 영역를 다음과 같이 엮을 수 있다.
- Working directory에서 파일을 수정한다. (Modified)
- Staging area에 파일을 stage한다. (Staged)
- Staging area에 있는 파일을 commit해서 .git 디렉토리에 영구적 스냅샷으로 저장한다. (committed)
Working directory의 파일 상태
사실 이 부분이 내가 이 글을 쓰게 된 이유이다.
git의 상태가 modified, committed, staged만 있는 줄 알았는데 다른 개념들도 갑자기 등장해서 혼란스러웠고,
그것을 내 방식대로 정리하고 싶어서 이 글을 썼다.
틀린 부분이 있다면 편하게 지적해주시면 감사하겠습니다.
이건 working directory 내에 파일의 상태를 나타내는 그림이다..
근데 왜 staged 상태가 working directory에 있는 걸까?
그건 왜냐면, working directory 내에 파일을 staged 상태로 만들면 그것이 staging area에 저장되기 때문이다.
즉, staged라는 상태는 working directory 내 파일에 해당하는 것이고 staging area는 별도의 공간이라고 생각하자.
tracked와 untracked
또, working directory의 파일은 크게 tracked와 untracked로 나뉜다.
Tracked는 관리대상인 상태를 말한다.
Tracked에는 다음과 같은 세가지 상태가 존재한다.
- Unmodified
- Modified
- Staged
Tracked 상태에 있는 파일이 변경되면 git은 그 변경사항을 추적한다.
이 그림을 보면 이해가 더 쉽다.
명령어에 따라서 어떤 상태인지를 나타낸 그림이다.
git add는 untracked file을 새로 추적하는 데에도 사용하고 modified된 파일을 staged 상태로 만들 때도 쓴다.
쉽게 말하면 파일을 staged 상태로 만들 때 쓴다.
- 이 말은 내가 새로운 파일을 생성한 후에도 git add를 하면 staged 상태가 되는 것이고(untracked → staged)
- 내가 git commit한 상태에서 어떤 파일을 수정하여 modified 상태로 만들고 git add를 하면 staged 상태가 된다는 것이다.(modified → staged)
- 마지막으로 Staged 상태의 파일을 commit하게 되면 다시 unmodified로 바뀌게 되는 것이다. (staged → unmodified)
그리고 이 상태가 계속 반복된다.