AJ 님의 "Advanced Git" 슬라이드 Study - 1




Git 저장소 분석





- Git 저장소는 아래와 같은 구조로 구성되어있다.











1. Working 영역(작업 폴더)


- "git init" 명령 실행 후 ".git" 파일이 저징되어 있는 위치를 가리킨다.









2. Staging 영역


Working 영역(작업 폴더)에 임의의 파일(Readme)을 생성 후 "git add ." 명령을 통해 Staging 영역으로 추가 시킨다.

또한, Working 영역의 Readme 파일은 "Blob" 형식으로 변환되어 아래 경로(.git/objects/3e/d8....79)에 저장되며, 파일의 실제 내용은 "Zlip(데이터 압축 라이브러리의 일종)"으로 압축되어 있다.



git add . 명령은? 


- Git로 하여금 앞으로 이 파일을 Tracking 하겠다는 선언이며, 다른 VCS(Version Control System) 시스템과는 달리 "commit" 단계가 아닌 "add" 단계에서 저장소에 파일이 생성되는 것을 볼 수 있다.










3. Repository 영역


"git commit" 명령을 통해 이전 Staging 영역에 등록된 리스트를 참조(add 명령을 통해 이미 Staging 영역에 파일이 등록되어 있기 때문)하여 새로운 "commit object"를 생성한다.


또한, 생성된 "commit object"는 아래 경로(.git/objects/48/c468937...72)에 저장되며, "Zlip"을 통해 압축된 내용을 확인 시, 아래와 같이 "Tree, Author, Committer, Commit msg" 가 담긴 내용을 확인할 수 있다.





.git/refs/heads/master 파일은 아래와 같이 "486893....72" commit object 객체를 가리키고 있다.









4. 두 번째 commit object 생성 후 HEAD 변화


- 위 과정을 통해 두 번째 "commit object" 까지 생성하게되면, 이전 "486893....72" 객체 가리키던, .git/refs/heads/master 파일은 새로운 commit object인 "786481...60" 객체 가리키게 된다.


이는 "git branch -v" 명령을 통해서도 확인 가능하다.









5. Git 저장소 내부 파일Status Life Cycle은 아래 같으며, 보시는 바와같이 파일의 Untrancked 시점과 Tracked 시점은 Git add 전/후로 나눠진다.(중요!!)






출처: http://www.slideshare.net/andabi/git-16126636








AJ 님의 "Advanced Git" 슬라이드(참고 슬라이드)