프로그래밍 관련 도구/Git

Git(git commit의 원리)

benjykim 2017. 7. 30. 09:45
반응형

* 들어가기 전 설정 

1. f1.txt(text : a), f2.txt(text : b), f3.txt( cp f1.txt f3.txt ) 

2. git add f1.txt f2.txt f3.txt

3. git commit 

4. commit message : 1


save image


-> 커밋 메세지에 해당되는 정보가 objects 안에 저장되어있다.

commit을 하면 버전(commit message)도 파일의 내용처럼 objects안에 들어간다.

( 결국 커밋도 내부적으로는 객체라고 할 수 있다. )


커밋 안에는 누가 커밋을 했는지에 대한 정보가 적혀있다.

그리고 tree 옆에는 object가 링크되어있다.

tree는 f1.txt이라는 파일과 f2, f3 각각의 파일의 내용이 무엇인지에 대한 정보가 담겨있다. )


-> 방금 우리가 커밋을 한 커밋 결과(버전)은 오브젝트 파일로 저장이 되고

그 오브젝트 파일에는 트리라고 하는 것이 적혀있는데 

그 트리의 값을 보면 현재 우리가 작성한 그 버전에 해당되는 파일의 이름과 내용이 링크되어있다.



* 그렇다면 f1.txt의 내용을 'b'로 변경한 뒤 커밋을 해보자
(commit message는 2라고 하자.)


다시 gistory를 Reload 해보면 다음과 같은 내용이 나온다.

이번엔 tree만 나오는 것이 아니라 parent도 나와있다. ( 첫번재 tree값과 두번째 tree값이 다르다. )

save image



* 커밋에는 중요한 정보 2가지가 담겨있다.

1. 이전 커밋이 누구인가? - 부모를 나타내는 parent


2. 커밋이 일어난 시점에 우리의 작업 디렉터리에 있는 파일의 이름과 

그 파일의 이름이 담고 있는 내용 사이에 정보가 바로 tree라는 곳에 담겨있다.


->그래서 각각의 버전마다 서로 다른 트리를 가리키고 있고

그 트리에는 파일의 이름과 그 파일에 담겨있는 각각 링크가 되어있기 때문에

우리는 버전에 적혀있는 트리를 통해서 그 버전이 만들어진 시점에 

우리의 프로젝트 폴더에 대한 상태를 얻어낼 수 있다. (*중요*)


(= 각각의 버전은 그 버전이 만들어진 시점의 스냅샷을 트리라고 하는 정보 구조를 통해서 가지고 있다.)



* object 파일은 크게 세가지로 구성되어있다.


1) blob - 파일의 내용을 담고있다.


2) tree - 어떤 디렉터리에 파일명과 그 파일명에 해당되는 내용에 해당되는 

            blob에 대한 정보를 가지고 있는 것.


3) commit 








*이 포스트는 이고잉님의 '지옥에서 온 Git'강의를 참고하여 작성했습니다.

URL : https://opentutorials.org/course/2708



반응형

'프로그래밍 관련 도구 > Git' 카테고리의 다른 글

Git(branch 정리)  (0) 2017.08.02
Git(git status의 원리)  (0) 2017.07.30
Git(objects 파일명의 원리)  (0) 2017.07.30
Git(git add의 원리)  (0) 2017.07.30
Git(git init,add,status,commit,log,diff,reset 정리)  (0) 2017.07.28