본문 바로가기

CS 잡지식

Git Commit의 원리(Feat. snapshot[스냅샷], tree,parent), Object 파일의 3가지 종류(Feat. commit ID, tree ID, blob ID)

결론은 먼저 말하자면, Git Commit 명령어를 실행하여 새로운 Version을 저장하는 순간 

1] 해당 Version에 대한 commit ID가 생성된다.

2] 해당 버전 파일에 디렉토리가 존재한다면 Tree 노드(=Tree ID)가 생성돼, 계층적으로 그 디렉토리 안의 포함된 파일들을 나타낸다.

3] 만약 해당 버전 파일에 디렉토리가 하나도 없고, 순수 파일(EX.txt파일)만이 존재를 한다면, blob(blob ID)으로 그 순수 파일을 나타낸다.

4] 또한 Parent 노드도 있다. 이 노드는 그 이전의 Version에 대한 정보를 담고 있는 Tree 노드이다. (아래의 그림을 참조)

 

1,2] 해당 commit ID에 해당하는 버전에는 d1이라는 디렉토리가 포함돼 있으므로, tree로 버전에 포함된 내용을 나타낸다.

 

3] d1 디렉토리 안에는 순수 파일(f1.txt)만이 있으므로, blob 형태로 나타낸다.

 

4] 새로운 버전2는 구 버전1을 parent 형태로 가지고 있다.

(Version 1은 최초의 버전이므로, Parent가 존재하지 않는다)

 

위와 같이 Obejct 파일은 3가지 종류(Commit ID, Tree ID[Parent ID도 포함], blob ID)로 구성이 된다.