Git & Github 원리 - .git 내부 살펴보기

WonJu Lee·2021년 7월 9일
0

Git & Github

목록 보기
7/9

이 포스트는 유튜브 채널 '생활코딩'의 '지옥에서 온 GIT : 원리 - 분석도구 gistory 소개' 를 정리한 글임을 밝힙니다. (https://www.youtube.com/watch?v=KyGfapLpWhY&list=PLuHgQVnccGMA8iwZwrGyNXCGy2LAAsTXk&index=15)

git add, commit, status 명령을 수행 했을 때, git은 어떤 방식으로 작동할까

.git의 구성

  • git은 file을 다루기 위해, index file과 objects directory를 운용함.

index

  • add된 file의 정보가 담겨져 있음

objects

  • add, commit된 file들의 실제 내용이 들어있음
  • object는 3가지 종류로 구분됨
    blob : file의 내용을 담고있는 파일
    tree : 해당 object가 다루고 있는 file들의 정보를 저장
    commit : 해당 commit이 다루고 있는 commit 관련 내용들

add

  • file이 add되면, git은 그 file의 정보를 index 파일에 기록함
  • 동시에 file의 내용을 담고 있는 object를 생성함
  • git은 파일의 내용이 같으면, 별도의 object를 생성하지 않음
  • 대신 이미 존재하는 object파일을 공유함
    -> 중복 제거 (효율적)
  • '파일 내용+ 부가정보'를 hash함수의 SHA1 알고리즘을 돌린 결과 중, [:2]를 object 이름으로, [2:]를 파일 이름으로 해서 정보를 저장함

commit

  • commit 내용을 object로 저장함
  1. tree : commit에 포함된 blob들을 담은 tree 주소 (SHA1)
  2. parent : 이전 commit object의 주소 (SHA1)
  3. commit 정보 : user.name, user.email
  4. commit message
  • 각 commit version마다 (각 commit object마다) 고유한 tree가 존재함
  • 최초가 아닌 commit version 마다, 이전 commit의 obejct 주소가 parent라는 이름으로 부여됨
  • 즉 version이 생성된 시점의 snap shot을 tree 구조로 관리함

status

Q. git status 명령을 수행했을 때, commit할 file이 없음을 어떻게 파악할까?
A. 최신의 commit object의 tree와 index file의 내용을 비교해서, 둘이 일치한다면 commit할 file이 없다고 판단! (add를 통해 index에 변동이 생기면, 가장 최근의 commit의 tree과 차이가 생기므로)

profile
Don't make excuses

0개의 댓글

관련 채용 정보