🎸 기타/git

[Git] Git의 원리 이해하기 - 내부 동작과 .git 파일 구조 분석

kyxxn 2024. 8. 1. 16:34

Git 원리를 공부하는 이유

  • 기억이 오래 감
    → 원리없이 공부하면 금방 까먹음
  • 공부할 때 효율이 올라감
    시간을 아낄 수도, 넓은 시야로 다른 궁금증을 가질 수도 있음
  • Git의 사용자가 아닌, Git을 만든 입장이 돼 봄
    다른 걸 만들 때, Git 만든 이론을 참고할 수도 있음

실습도구: Gistory

내 .git 디렉토리의 변화를 GUI로 쉽게 보여줌

localhost:8805로 가서 보면 위와같이 보임

.git 디렉토리 내부 구조의 파일들을 볼 수 있어서 보기 쉬움

그럼 .git 디렉토리에는 뭐뭐 있고, 어떤 역할을 할까?

.Git 디렉토리 내부 구조

index

파일의 이름을 갖고 있음

  • SHA-1 키값을 통해 변화된 파일 이름을 가리킴
  • 파일의 실제 내용은 objects 디렉토리 내에 있음
  • 위 밑줄 친 부분은 ‘2444.c’라는 파일이 변경됨을 가리킴

objects

파일의 내용을 담고 있음

  • objects에는 object들이 관리됨
  • Index에서 파일의 이름을 갖고 있다면, object는 내용을 갖고 있음
  • Index에서 갖는 키값의 앞의 두자리는 디렉토리 명이고, 나머지가 파일명 정보

Index와 Objects의 관계

  • Index에는 파일 명만 적힘
  • Objects는 파일 내용이 담겨있음
  • [중요] 파일의 이름이 달라도, 파일 내용이 같으면 같은 object를 가리킴

무슨 말인지 실습으로 보자

이 사진을 보면 nano copy.txt 로 내가 asd 를 입력한 새 파일인데,

Gistory를 보면 같은 Index 값을 가지고 있고, objects에 들어가서 보면 해당 부분에 copy.txt와 temp.txt 두 파일이 asd를 갖고 있다.

어떻게 가능한걸까 ?

SHA-1 해싱 사용

Index에 적혀있는 값은 SHA1을 통해서 값을 얻게 되는데,

파일 내용을 대상으로 SHA1로 해싱하기 때문에 해시값이 똑같게 나오는 원리임

git의 경우 파일 내용 뿐만 아니라, 추가적인 정보들도 넣어서 zlib으로 압축한 다음 SHA-1 해싱하고,

그 결과를 Index에 저장하고 앞에 두 글자만 따서 objects 내에 디렉토리를 만들어 내부에 내용을 저장한다.



레퍼런스

https://www.youtube.com/watch?v=KyGfapLpWhY&list=PLuHgQVnccGMA8iwZwrGyNXCGy2LAAsTXk&index=16&ab_channel=생활코딩

https://www.youtube.com/watch?v=IU2ByZ-V26Y&list=PLuHgQVnccGMA8iwZwrGyNXCGy2LAAsTXk&index=16&ab_channel=생활코딩