36. COMMIT
commit SP content-length NUL
tree SP sha-1 NEWLINE
parent SP sha-1 NEWLINE
author SP name SP mail SP unixtime SP
timezone-offset NEWLINE
committer SP name SP mail SP unixtime
SP timezone-offset NEWLINE
NEWLINE message
12년 8월 23일 목요일
76. HEAD
tree 8f7bc
refs/heads/master
parent 15c68
author Yi
committer Yi
15c68
the second commit!
c97aa 8f7bc
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
77. HEAD
tree 8f7bc
refs/heads/master
parent 15c68
author Yi
committer Yi
15c68
the second commit!
c97aa 8f7bc
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
78. HEAD
refs/heads/master
15c68 59866
c97aa 8f7bc
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
79. HEAD
refs/heads/master
15c68 59866
c97aa 8f7bc
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
80. HEAD
refs/heads/master
15c68 59866
c97aa 8f7bc
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
81. HEAD
refs/heads/master
15c68 59866
c97aa 8f7bc
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
82. HEAD
refs/heads/master
15c68 59866
c97aa 8f7bc
8ab68 02c8f Bye, World!
(greet) (greet)
12년 8월 23일 목요일
83. HEAD
refs/heads/master
15c68 59866
c97aa 8f7bc
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
84. HEAD
refs/heads/master
15c68 59866
c97aa 8f7bc 100644 bye 02c8f
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
85. HEAD
refs/heads/master
15c68 59866
c97aa 8f7bc 100644 bye 02c8f
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
86. HEAD
refs/heads/master
15c68 59866
c97aa 8f7bc cab01
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
87. HEAD tree cab01
refs/heads/master parent 59866
author Yi
committer Yi
15c68 59866
the third commit!
c97aa 8f7bc cab01
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
88. HEAD tree cab01
refs/heads/master parent 59866
author Yi
committer Yi
15c68 59866
the third commit!
c97aa 8f7bc cab01
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
89. HEAD
refs/heads/master
15c68 59866 95dfd
c97aa 8f7bc cab01
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
90. HEAD
refs/heads/master
15c68 59866 95dfd
c97aa 8f7bc cab01
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
91. HEAD
refs/heads/master
15c68 59866 95dfd
c97aa 8f7bc cab01
8ab68 02c8f
(greet) (greet)
12년 8월 23일 목요일
92. 커밋된 파일 읽는 법
• .git/HEAD 를 읽어서 현재 브랜치를 알아냄
• 현재 브랜치를 읽어서 커밋의 sha1sum을 알아냄
• 커밋을 읽어서 루트 tree의 sha1sum을 알아냄
• 루트 tree를 읽어서 읽고자 하는 blob(파일)의 sha1sum을
알아냄
• blob(파일)을 읽음
12년 8월 23일 목요일
94. GIT OBJECTS
• Loose object - packfile에 들어있지 않은 object
• Packed object - packfile에 들어있는 object
12년 8월 23일 목요일
95. PACK
• You must have around 7,000 loose objects or more than 50
packfiles for Git to fire up a real gc command.
• push/pull을 할 때도 packfile을 주고받음
• Documentation/technical/pack-format.txt
• https://github.com/schacon/gitbook
12년 8월 23일 목요일
96. PACK에서 GIT OBJECT 얻는 법
• 찾고자 하는 object가 .git/objects 에 없으면,
• .git/objects/pack/*.idx 를 뒤져서 object가 어느 pack의 어디
에 있는지 알아냄
• 알아낸 곳을 읽고 해석하여 object를 얻음
12년 8월 23일 목요일
109. TYPE 별 BODY 해석방법
• OBJ_COMMIT, OBJ_TREE, OBJ_BLOB, OBJ_TAG
• Git Object의 body (deflate로 압축된 상태)
12년 8월 23일 목요일
110. TYPE 별 BODY 해석방법
• OBJ_REF_DELTA
• body의 첫 20바이트는 base object의 sha1sum
• 나머지는 base object에 대한 delta (deflate로 압축되어있
음)
12년 8월 23일 목요일
111. TYPE 별 BODY 해석방법
• OBJ_OFS_DELTA
• header에서 body size를 해석한 것과 같은 방법으로 해
석해서 base object에 대한 offset을 얻는다.
• 나머지 부분은 base object에 대한 delta (deflate로 압축
되어있음)
12년 8월 23일 목요일