이번에는 index
라는 파일이 무엇인지 status
라는 명령이 어떻게 동작하는지 지레짐작해보겠습니다.
📌 index파일과 status의 원리는 무엇인가?
git status
명령을 했을때 커밋할 파일이 없다는것을 git
은 어떻게 알고있을까요?
gistory
의 index
파일과
가장 최근에 생성된 object
파일의 트리의 내용을 비교했을때
두 내용이 같으면 현재 커밋할 것이 없다고 판단합니다.
f2.txt
파일의 내용을 y\nz
에서 x\ny\nz
로 변경해보겠습니다.
이때 git status
명령을 쓰면 f2.txt
파일이 변경되었다고 알려줍니다.
git
은 과연 어떻게 이 사실을 알게되었을까요?
📌 git은 어떻게 status를 통해 변경된 사항을 알려줄까?
추정해보면 , gistory
에서 index
파일의 f2.txt
해쉬값과
현재 f2.txt
파일의 내용이 가지는 해쉬값이 다르다면 우리에게 f2.txt
라는 파일이 수정되었다는것을 알려줄 수 있습니다.
현재 f2.txt
파일은 add
를 하지 않은 상태이기 때문에 수정만 했을뿐 커밋의 대상이 되지않습니다.
하지만 git add f2.txt
를 통해서 f2.txt
는 커밋의 대상이 됩니다.
gistory
의 object
에서 f2.txt
파일의 내용과
gistory
에서 index
의 f2.txt
파일의 내용이 같을때 f2.txt
파일이 커밋가능한 상태임을 확인 할 수 있습니다.
또한 이때 해쉬값인 04ec35a6dc0776b83fdb3d9d238007c7dea360c8
과
가장 최근 커밋의 트리파일에서 f2.txt
의 해쉬값이 2795c87096b42d4b7b8fda82a67dabded5c72c97
로 서로 다르다는 것을 확인할 수 있는데 이를 통해 f2.txt
파일은 add
가 된 상태이고 커밋가능한 상태임을 확인할 수 있습니다.
이후 git commit
을 하겠습니다.
커밋을 했기 때문에 가장 최근의 커밋 트리의 f2.txt
해쉬값이
index
의 f2.txt
해쉬값과 04ec35a6dc0776b83fdb3d9d238007c7dea360c8
로 같게됩니다.
또한 디렉토리에있는 f2.txt
파일의 내용도 x\ny\nz
로 일치합니다.
따라서 3가지 조건이 총족하게 됩니다.
위 3가지 요소가 모두 내용이 같을때 git
은 status
명령을 통해
더이상 커밋할 파일이 없다 라는것을 확인 할 수 있습니다.
git working directory vs index vs repository
라고 구글에 검색을 하면 다음과 같은 사진을 얻을 수 있습니다.
프로젝트 폴더( workspace
, working directory
) 에서 add
를 하게 되면 그 내용들이 index
파일에 등록됩니다. 이후 커밋을 하면 index
파일에 등록된 내용들이 여러분의 repository
에 object
로 저장됩니다.
commit object
, tree
, file
총 3가지가 저장됩니다.
또한 index
는 커밋되기전 상태를 뜻하므로 staging area
라고도 부릅니다.
지금까지 status
의 원리와 index
파일에 대해 알아보았습니다.