* 들어가기 전 설정
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
-> 커밋 메세지에 해당되는 정보가 objects 안에 저장되어있다.
commit을 하면 버전(commit message)도 파일의 내용처럼 objects안에 들어간다.
( 결국 커밋도 내부적으로는 객체라고 할 수 있다. )
커밋 안에는 누가 커밋을 했는지에 대한 정보가 적혀있다.
그리고 tree 옆에는 object가 링크되어있다.
( tree는 f1.txt이라는 파일과 f2, f3 각각의 파일의 내용이 무엇인지에 대한 정보가 담겨있다. )
-> 방금 우리가 커밋을 한 커밋 결과(버전)은 오브젝트 파일로 저장이 되고
그 오브젝트 파일에는 트리라고 하는 것이 적혀있는데
그 트리의 값을 보면 현재 우리가 작성한 그 버전에 해당되는 파일의 이름과 내용이 링크되어있다.
* 그렇다면 f1.txt의 내용을 'b'로 변경한 뒤 커밋을 해보자
(commit message는 2라고 하자.)
다시 gistory를 Reload 해보면 다음과 같은 내용이 나온다.
이번엔 tree만 나오는 것이 아니라 parent도 나와있다. ( 첫번재 tree값과 두번째 tree값이 다르다. )
* 커밋에는 중요한 정보 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 |