지식 정리/git & github

Git 내부 동작 원리와 용어 정리

Unagi_zoso 2022. 4. 15. 19:15

Git 내부 동작 원리를 설명함에 앞서

먼저 용어 정리를 하겠다.

 

Local (Working tree) :

작업의 대상인 프로젝트의 소스 코드들의 디렉터리

 

Index (Staging Area, Cache) :

commit을 하기 git add 함수로 tracking이 된 파일들을 관리하는 영역이다.

index에서는 commit 되기 파일의 파일명과 해당 파일의 내용이 담긴 Blob 파일이 기록되어있다.

실제 위치는 프로젝트 폴더 하위에 있는 .git/index 이다.

 

Repository

깃이 버전관리를 위해 소스 코드와 데이터들을 저장하는 영역이다. 버전관리를 시작한 시점부터

현재 시점까지 관리해온 여러 버전의 파일들의 내용이 Blob 파일로 저장되어 있다.

이곳에 저장된 파일들은 Object 파일이라 부르며 Blob 또한 한 종류이다.

repository는 컴퓨터 내에서 존재하는 local repository와 원격으로 관리가 가능한 remote repository로 나뉜다.

 

실제 위치는 프로젝트 폴더의 하위에 있는 .git/objects/ 폴더에 존재하는 파일이다.

 

 

 

Object 파일

 

Object 파일의 위치는 프로젝트 폴더의 하위에 있는 .git/objects/ 디렉터리에 있는 파일들이다.

 

Object 파일의 종류 (Blob, Commit, Tree, Tag)

 

Blob :

버전관리가 되어지는 파일들의 내용은 repository에서 Blob 파일의 형태로 저장된다. 

파일의 내용에는 SHA1이라는 해싱 기법을 적용하며 그 결과로 이름이 정해져 내용이 같은

파일들은 모두 하나의 Blob 파일로 저장된다. 그러기에 Git은 여러 버전의 소스 코드들

사이에서 중복 없이 관리가 가능한 것이다.

 

Commit :

새로운 버전을 생성할 때 하나의 Commit 파일이 생성되는데, Commit 파일은

하나의 Tree 파일을 가리켜야 한다. (버전을 구분하기 위함) Commit 파일에는

가리키고 있는 Tree 파일의 주소(이름)와 직전 버전에 해당하는 Commit 파일의 주소(이름)가 기록된다.

 

Tree :

commit 시점의 파일들 각각에 대해 그 파일명과 해당 파일의 내용을 담고 있는

Blob 파일의 주소(이름)가 기록된다. 위에서 설명했던 인덱스 파일(.git/index)과 성격이 유사하다.

/** index는 commit 전 파일을 tracing 할 때의 시점 Tree는 commit 시점 **/

 

Tag :

Commit object 파일을 가리키며 태그명작성자, 주석을 담는다.

 

 

 

Branch :

한 프로젝트의 여러 개발 계획 중 한 노선이라 할 수 있다. 분산 버전관리의 핵심적인 컨셉이다.

branch라는 이름에서 알 수 있듯 하나의 줄기를 기준으로 하나 이상의 줄기로 뻗어나가는 이미지다.

repository를 만들면 기본적으로 main이라는 branch가 생기고, 이 main에서 프로젝트를 개발하다가

기존 기능에서 추가적인 기능을 만들려한다면 다른 branch를 만들어 기존의 main branch의 소스코드는

둔 채 안전하게 개발이 가능하다.

 

 

내부 동작 원리

 

Git의 기본적인 원리는 다음과 같은 도표로 한 눈에 알아볼 수 있다.

 

 

출처 : http://csteele.com    workspace == local, working tree

 

 

git.add 명령어를 통하여 workspace(local, working tree)의 파일과 데이터들을 지금부터 tracing하며

index 영역에 Blob파일로 그 내용을 저장한다.

이후 git.commit 명령어를 통하여 index에 저장된 정보를 바탕으로 local repository에 기록한다.

추가적으로 git.push 명령어를 통해 이렇게 기록된 정보를 remote repository에 기록하여 안전하게 다룰 수 있다.

 

 

 

 

본 글을 작성하는데 있어 아래 글을 참고하였습니다.

 

https://it-eldorado.tistory.com/4