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 에서의 HEAD와 Branch는 Pointer임을 기억하자.
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(master) Pointer는 C2(두 번째 commit 객체)를 가리킨다.
3. C3(두 번째 commit 객체) 생성 후 HEAD Pointer 및 Branch Pointer의 변화
- C3(세 번째 commit 객체) 생성 후 HEAD Pointer는 기존 master Branch를 가리키며, 해당 branch(master) Pointer는 C3(세 번째 commit 객체)를 가리킨다.
4. 새로운 Branch(develop)를 생성 후 HEAD Pointer 및 Branch Pointer를 각각 develop Branch와 C2(두 번째 commit 객체)를 가리키도록 만든다
HEAD > develop Branch
develop Branch > C2(두 번째 commit 객체)
- 아래 결과와 같이 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 Branch: C1 > C2 > C3
develop Branch: C1 > C2 > C4 > C5
- AJ 님의 "Advanced Git" 슬라이드(참고 슬라이드)