git 에는 크게 3가지의 작업 환경으로 나누어져 있다.

첫 번째로는 우리가 프로젝트의 파일들을 수정, 작업하고 있는 working directory

두 번째로는 어느 정도 작업하다가 version history에 저장할 준비가 되어 있는 파일들을

옮겨 놓는 staging area

세 번째로는 버전의 history를 가지고 있는 git directory(repository) 로 나누어져 있다.

b와 c 라는 작업이 어느 정도 완료 되었다고 판단되면 staging area로 파일을 옮긴다.

그리고 commit 이라는 명령어로 staging area 에 있는 파일들을 git version history 에 저장

하게 된다.

이렇게 git directory 에 저장되어 있는 version 들은 checkout 이라는 명령어로 언제든지
원하는 version 으로 다시 돌아갈 수 있다.

이렇게 저장된 histotry는 개인 local 컴퓨터에만 저장되어 있다. 고장 나면 큰일이겠지?

그렇기 때문에 보통은 나의 pc에만 저장해 두지 않고, git hub 와 같은 server에 push 라는

명령어를 이용해서 local git directory 를 server 에 업로드 시킬 수 있다.

다시 server—> local 로 다운로드 받고 싶다면 pull 명령어로 받을 수 있다.

여기서 server 는 github 나 bitbucket 이 있다.

각각의 version 들에 어떤 정보가 들어 있을까?

각각의 commit 에는 snapshot 된 정보들을 기반으로 고유한 hash 값을 가진다.

이 hash 값으로 버전 정보들을 참조 할 수 있다.

어떤 version 인지 version 에 관련된 message 와 누가 작성했는 지의 author

날짜와 시간 또한 포함되어 있다.
working directory 는 엄밀히 말하면 두가지로 나뉜다.

git 이 이미 알고 있는 file 이면 tracked 카테고리로 분류되고,

새로운 파일이거나, 기존에 존재하던 프로젝트에서 git 을 초기화 하게 되면 untracked 으로 분류한다.

지금 이 시점에 tracking 되고 있는 파일들도 2개로 나눌 수 있다.
현재 수정이 되었는지 유무에 따라 unmodified, modified 로 나뉜다.
unmodified 는 이전 버전과 비교해서 수정되지 않았기 때문에 modified 만 staging area로 갈 수 있다.