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



Git Tree 객체



1. Blob +  다른 Tree 객체

2. 폴더와 같은 계념

3. .git/objects 아래 저장된다.



- 폴더Tree 객체로 파일Blob 객체로 표현된다.




- C5(다섯 번째 commit 객체)의 압축(Zlib format)된 내용을 확인 시 "404d7be....1a" 라는 해당 Tree 객체를 확인할 수 있으며, 객체(404d7be....1a) 내용 확인 시 객체(폴더) 내부에 포함된 파일들의 목록(C1 ~ C5)을 볼 수 있다.



- 하지만 아래서 보는 바와 같이 Tree 객체가 보통 파일 시스템과 같이 하나만 존재하는 것이 아닌 commit 객체들의 단계에 따라 지속해서 생성된다.


C5(다섯 번째 commit 객체)에 포함된 Tree 객체 열람 시.



- C4(네 번째 commit 객체)에 포함된 Tree 객체 열람 시.








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






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



Git 저장소 파일 분석(Blob 형식)





1. Header 형식을 포함하여 Zlib으로 압축되어 저장된다.


- Header 형식: "Blob/원본 파일크기/null" > "blob(객체 종류) 11(원본 파일 크기)\x00(null 바이트) some-value\n"



- 실제 이전 포스트에서 생성된 C1(첫 번째 commit 객체)에 대한 파일 뷰는 아래와 같다.



- Git는 내부에서 생성되는 모든 파일을 단순 이름이 아닌 SHA-1 Hash(902640....8a) 방식으로 저장한다. 이는 16진수 문자로 조합된 40개문자열로 파일의 내용 및 해당 디렉터리 구조를 바탕으로 구성되어진다.


- 보안 상 오직 Git를 통해서만 원하는 파일에 접근수정이 가능하다.







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





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





prev 1 2 3 4 5 6 7 ··· 56 next