Git으로 별 거 못해도안해도 자주 마주치게 되는 깃저장소, 로컬저장소, 스테이지, 워킹트리 같은 용어들의 의미와 관계를 정리해보고, 우리가 명령어를 칠 때 Git에서는 어떤 일들이 일어나는지 살펴보세요.
Git은 어떤 폴더의 변천사를 기록하고 싶을 때 사용하는 도구이지요. 우리의 작업폴더에 깃저장소가 생긴다는 것은 이 기록물을 보관할 수 있는 지하실이 짜잔! 생긴다는 걸 의미합니다. 깃저장소와 함께라면 해당 폴더의 모든 역사를 기록하고 언제든 다시 꺼내볼 수 있어요.
git 어쩌구
를 치면, 어라? 아무 일도 일어나지 않아요.git init
을 쳐야 해요. 그러면 Initialized empty Git repository in A폴더/.git
라는 메시지와 함께 A폴더 안에 .git 폴더가 생겨요. (혹은 새롭게 git clone
하는 방법도 있지요.) 이 .git 폴더가 바로 깃저장소! 이제 A폴더는 git 어쩌구
를 잘 알아듣게 됐어요.ls -a
!깃저장소에는 index라는 파일과 objects라는 폴더가 있어요.
git add
를 하면 index파일이 생겨나고, git add
를 할 때마다 index에 기록이 업데이트되어요.objects라는 폴더에는 여러 종류의 객체가 보관되어 있어요. 객체는 인사이드아웃의 기억구슬처럼, 뭔가를 기억할 필요가 있을 때마다 하나씩 생겨나요. 각 객체에는 고유한 키값이 있어서 Git은 이 키값을 이용해서 모든 객체를 구별하고, 포인터처럼 활용하기도 하지요. (맞아요, 78981922613b2afb6025042ff6bd878ac1994e85
요렇게 생긴 것들이요! 더 알아보려면 아래를 봐주세요~)
git add
할 때마다 생겨나는 구슬이에요. 그 때의 내용이 그~대로 스캔되듯 담겨있어요. index에 올라가는 건 이 구슬의 ID랍니다!우리가 git commit
하는 순간, Git은 먼저 index를 바탕으로 사진을 한 장 찍어서 트리구슬을 하나 만든 다음, 그 구슬에 대한 커밋구슬을 만들어요.
git commit
은 '스냅 샷'에 자주 비유되지요. 여럿이서 찍은 사진을 보면 그 순간의 모든 상황들이 그려지는 것처럼, 트리에는 커밋하는 순간에 스테이지에 있던 작업파일들의 ID뿐 아니라 실제 파일이름, 어느 디렉토리에 속하는지 같은 전체 관계도가 담겨 있어요.git commit -m "뭔가 수정함!!"
하고 적은 커밋메시지가 여기에 담겨 있어요.