'2013/08/02'에 해당되는 글 2건

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

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





Git HEAD Pointer 및 Branch Pointer 설명




1. Git 명령의 대부분은 File 보다는 Commit 객체를 다룬다.

2. Git 에서의 HEADBranchPointer임을 기억하자.








1. C1(첫 번째 commit 객체) 생성 후 HEAD Pointer 및 Branch Pointer의 변화



- C1(첫 번째 commit 객체) 생성 후 HEAD Pointer는 기존 master Branch를 가리키며, 해당 branch(master) Pointer는 C1(첫 번째 commit 객체) Pointer를 가리킨다.









2. C2(두 번째 commit 객체) 생성 후 HEAD Pointer 및 Branch Pointer의 변화



- C2(두 번째 commit 객체) 생성 후 HEAD Pointer는 기존 master Branch를 가리키며, 해당 branch(masterPointerC2(두 번째 commit 객체)를 가리킨다.







3. C3(두 번째 commit 객체) 생성 후 HEAD Pointer 및 Branch Pointer의 변화



C3(세 번째 commit 객체) 생성 후 HEAD Pointer는 기존 master Branch를 가리키며, 해당 branch(masterPointer는 C3( 번째 commit 객체)를 가리킨다.







4. 새로운 Branch(develop)를 생성 후 HEAD PointerBranch Pointer를 각각 develop Branch와 C2(두 번째 commit 객체)를 가리키도록 만든다




HEAD > develop Branch

develop Branch > C2(두 번째 commit 객체)




- 현재 develop BranchC3(세 번째 commit 객체)를 가리키고 있으며, "git reset --hard HEAD~" 명령을 통해 마지막 commit 객체인 C3(세 번째 commit 객체) Reset시켜 develop Branch가 다시 C2(두 번째 commit 객체)를 가리키도록 만든다.(해당 Branch의 commit History를 조작한다.)




- 아래 결과와 같이 HEAD Pointer는 delvelop Branch를 develop Branch의 Pointer는 C2(두 번째 commit 객체)를 가리키게 된다.







5. C4(두 번째 commit 객체) 생성 후 HEAD Pointer 및 Branch Pointer의 변화



C4(네 번째 commit 객체) 생성 후 HEAD Pointer는 develop Branch를 가리키며, 해당 branch(develop) Pointer는 C4( 번째 commit 객체)를 가리킨다.





- develop Branch는 C4(네 번째 commit 객체)를 가리키고 있으며, "ls" 명령 후에는 자신만의 Working 영역 

C1 > C2 > C4 파일만을 출력한다.







6. C5(두 번째 commit 객체) 생성 후 HEAD Pointer 및 Branch Pointer의 변화



C5(다섯 번째 commit 객체) 생성 후 HEAD Pointer는 develop Branch를 가리키며, 해당 branch(develop) Pointer는 C5(다섯 번째 commit 객체)를 가리킨다.


또한, develop Branch는 C5(다섯 번째 commit 객체)를 가리키고 있으며, "ls" 명령 후에는 자신만의 Working 영역 C1 > C2 > C4 > C5 파일만을 출력한다.







6. HEAD Pointer  Branch Pointer 결과



- 결국 master branch와 develop Branch는 각각 자신만의 Working 영역 안의 파일만을 출력시키게 된다.



master BranchC1 > C2 > C3

develop BranchC1 > C2 > C4 > C5








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





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" 슬라이드(참고 슬라이드)






prev 1 next