[GIT] git의 원리-1

NAEMAMDAEROG·2021년 12월 1일
0

git add의 원리

  • git add를 하면 .git/index에는 add한 파일들의 이름이 저장되고, .git/objects에는 add한 파일들의 내용이 저장된다.
  • f1.txt를 복사한 f3.txt를 add 하면 .git/objects에는 f1.txt의 내용이 있던 파일에 시간만 바껴 있고, .git/index에는 f3.txt의 이름이 추가 됐다.
  • git은 파일의 이름이 달라도 내용이 같으면 같은 objects 파일을 가리킨다.

objects 파일명의 원리

  • 파일의 내용을 sha1 hash로 넘겨서 나오는 값의 첫 번째, 두 번째 글자가 objects 아래의 폴더명이다. 그 폴더 아래 세 번째 글자부터 시작해서 끝까지의 이름을 가진 파일이 생성된다.
  • ex) 'hi' 내용의 파일명은 objects/c2/2b5f...a42
  • git은 파일의 내용 뿐만 아니라 부가적인 정보도 같이 저장되기 때문에 최종적인 hash 값이 다를지언정 mechanism은 동일하다.
  • objects 파일은
    • blob : 내용을 담고 있다.
    • tree : 내용과 파일명을 담고 있다.
    • commit : commit 했을 때 message와 그 전 버전들의 내용을 담고 있다.

commit의 원리

  • commit message도 add 했을 때 objects에 생긴 폴더에 저장된다.
  • tree는 우리가 작성한 버전의 내용과 파일 이름이 저장되어 있다.
  • 두 번째 버전부터는 parent에 전 버전이 저장되어 있다.
  • 각각의 버전은 그 때 만들어진 스냅샷을 트리라는 정보구조를 통해 가지고 있다.

status의 원리

  • index 파일과 최근 commit한 파일이 똑같다면 commit 할 게 없다고 인식한다.
  • 내용을 수정한다면 수정한 내용의 hash 값과 최근 commit한 파일의 내용 hash 값이 다르기 때문에 파일이 수정됐다고 인식할 수 있다.
  • git add를 하면 index에 있는 파일 내용과 local 파일의 내용이 일치하기 때문에 commmit 대기 상태라고 알 수 있다.
  • index에 있는 파일의 내용과 최근 commit한 파일의 내용이 다르면 commit 대기 상태라고 알 수 있다.

git add, git commit

  • working directory -- (git add) --> index, staging area -- (git commit) --> repository

출처 : 생활코딩 - 지옥에서 온 git
https://opentutorials.org/course/2708/15212

profile
Blockchain & Programming 공부 기록

0개의 댓글