GIT INTERNAL                     부제: Git 만드는 법12년	 8월	 23일	 목요일
기본 - GIT 저장소 읽고 쓰기                    커밋하고 커밋한 것 읽기12년	 8월	 23일	 목요일
GIT STORAGE   • Git      저장소 = Git Object 저장소   • Git      Object = Key-Value pair       • Value       = Blob(파일), Tree(디렉...
GIT STORAGE 만드는 법   •        mkdir -p .git/objects   •        mkdir -p .git/refs   •        echo ref: refs/heads/master > ...
GIT OBJECTS   • Blob           (파일)   • Tree           (디렉토리)   • Commit           (저자정보, 날짜, 커미터 정보, 커밋 메시지 등)   • Tag12년...
BLOB      “blob” <SP> content-length <NUL> content12년	 8월	 23일	 목요일
BLOB의 예                    blob
 17welcome
 to
 n4wiki12년	 8월	 23일	 목요일
TREE      tree SP content-length NUL      1*((100644|”40000”) SP name NUL sha1sum-bin)12년	 8월	 23일	 목요일
TREE의 예          100644
 blob
 8e8d68219f81ce69ecb502e43539754770ff0176
    DeveloperGuide.md          040000
 tree
 78ee1e687641a9d3aa6afaf6c82fb86fab744a4d
    api          100644
 blob
 34b3f62387daf615948ecaf62d3cdee263df6a20
    i18n.md          040000
 tree
 dbad3d4da10843b1d666feffa58b0319a8a346b3
    spec          040000
 tree
 17bbf90ac4d32f861227f93eed9dea7c48c279ad
    zz.emberjs12년	 8월	 23일	 목요일
TREE의 예          tree
 178100644
 DeveloperGuide.md??h!???i??59uGp?v40000
 apix?hvA?          Ӫj???/?o?tJM100644
 i18n.md4??#???????-??c?j
 40000
 spec듣                                                                                                                    ...
 zz.emberjs??          ??/????|H?y?12년	 8월	 23일	 목요일
COMMIT      commit SP content-length NUL      tree SP sha-1 NEWLINE      parent SP sha-1 NEWLINE      author SP name SP  m...
COMMIT의 예                    commit
 252tree
 1d0a84f977f13ae6f1b398e0224d40f181725233                    parent
 a71a8e9cb41ada4ced77c35ec8f2eaa45c64f729                    author
 Yi
 EungJun
 semtlenori@gmail.com
 1345526494
 +0900                    committer
 Yi
 EungJun
 semtlenori@gmail.com
 1345526494
 +0900                    test:
 Fix
 the
 test
 for
 getTreeHead().12년	 8월	 23일	 목요일
GIT OBJECT 저장하는 법   • 내용의            sha1sum을 계산   • 내용을            deflate로 압축   • sha1sum을 이름으로 해서 .git/objects/sha1sum앞2...
LIVE CODING                    https://github.com/npcode/git-internal-demo12년	 8월	 23일	 목요일
REFS   • .git/HEAD: 현재   브랜치를 가리킴   • .git/refs/heads/*: 로컬   저장소의 브랜치들   • .git/refs/remotes/*: 원격   저장소의 브랜치들12년	 8월	 23...
커밋하는 법   • 커밋할             파일들을 blob으로 저장   • 디렉토리를             tree로 저장   • 루트  디렉토리의 sha1sum, 저자 정보, 커밋 메시지 등을      담은 c...
12년	 8월	 23일	 목요일
Hello, World!12년	 8월	 23일	 목요일
8ab68                    (greet)12년	 8월	 23일	 목요일
100644 greet 8ab68                          8ab68                          (greet)12년	 8월	 23일	 목요일
100644 greet 8ab68                          8ab68                          (greet)12년	 8월	 23일	 목요일
c97aa                    8ab68                    (greet)12년	 8월	 23일	 목요일
tree c97aa                    author Yi                    committer Yi                    the first commit!               ...
tree c97aa                    author Yi                    committer Yi                    the first commit!               ...
15c68                    c97aa                    8ab68                    (greet)12년	 8월	 23일	 목요일
HEAD refs/heads/master                     15c68                     c97aa                     8ab68                     (...
HEAD refs/heads/master                     15c68                     c97aa                     8ab68                     (...
HEAD refs/heads/master                     15c68                     c97aa                     8ab68     Bye, World!      ...
Upcoming SlideShare
Loading in...5
×

[Hello world]git internal

8,410

Published on

[Hello world]git internal

  1. 1. GIT INTERNAL 부제: Git 만드는 법12년 8월 23일 목요일
  2. 2. 기본 - GIT 저장소 읽고 쓰기 커밋하고 커밋한 것 읽기12년 8월 23일 목요일
  3. 3. GIT STORAGE • Git 저장소 = Git Object 저장소 • Git Object = Key-Value pair • Value = Blob(파일), Tree(디렉토리), Commit, Tag • Key = Value에 대한 160bit SHA-1 hash값 (이하 sha1sum)12년 8월 23일 목요일
  4. 4. GIT STORAGE 만드는 법 • mkdir -p .git/objects • mkdir -p .git/refs • echo ref: refs/heads/master > .git/HEAD12년 8월 23일 목요일
  5. 5. GIT OBJECTS • Blob (파일) • Tree (디렉토리) • Commit (저자정보, 날짜, 커미터 정보, 커밋 메시지 등) • Tag12년 8월 23일 목요일
  6. 6. BLOB “blob” <SP> content-length <NUL> content12년 8월 23일 목요일
  7. 7. BLOB의 예 blob
  8. 8.  17welcome
  9. 9.  to
  10. 10.  n4wiki12년 8월 23일 목요일
  11. 11. TREE tree SP content-length NUL 1*((100644|”40000”) SP name NUL sha1sum-bin)12년 8월 23일 목요일
  12. 12. TREE의 예 100644
  13. 13.  blob
  14. 14.  8e8d68219f81ce69ecb502e43539754770ff0176
  15. 15.   DeveloperGuide.md 040000
  16. 16.  tree
  17. 17.  78ee1e687641a9d3aa6afaf6c82fb86fab744a4d
  18. 18.   api 100644
  19. 19.  blob
  20. 20.  34b3f62387daf615948ecaf62d3cdee263df6a20
  21. 21.   i18n.md 040000
  22. 22.  tree
  23. 23.  dbad3d4da10843b1d666feffa58b0319a8a346b3
  24. 24.   spec 040000
  25. 25.  tree
  26. 26.  17bbf90ac4d32f861227f93eed9dea7c48c279ad
  27. 27.   zz.emberjs12년 8월 23일 목요일
  28. 28. TREE의 예 tree
  29. 29.  178100644
  30. 30.  DeveloperGuide.md??h!???i??59uGp?v40000
  31. 31.  apix?hvA? Ӫj???/?o?tJM100644
  32. 32.  i18n.md4??#???????-??c?j
  33. 33.  40000
  34. 34.  spec듣 =MC??f??????F? 40000
  35. 35.  zz.emberjs?? ??/????|H?y?12년 8월 23일 목요일
  36. 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 message12년 8월 23일 목요일
  37. 37. COMMIT의 예 commit
  38. 38.  252tree
  39. 39.  1d0a84f977f13ae6f1b398e0224d40f181725233 parent
  40. 40.  a71a8e9cb41ada4ced77c35ec8f2eaa45c64f729 author
  41. 41.  Yi
  42. 42.  EungJun
  43. 43.  semtlenori@gmail.com
  44. 44.  1345526494
  45. 45.  +0900 committer
  46. 46.  Yi
  47. 47.  EungJun
  48. 48.  semtlenori@gmail.com
  49. 49.  1345526494
  50. 50.  +0900 test:
  51. 51.  Fix
  52. 52.  the
  53. 53.  test
  54. 54.  for
  55. 55.  getTreeHead().12년 8월 23일 목요일
  56. 56. GIT OBJECT 저장하는 법 • 내용의 sha1sum을 계산 • 내용을 deflate로 압축 • sha1sum을 이름으로 해서 .git/objects/sha1sum앞2자/ sha1sum나머지38자 파일로 저장12년 8월 23일 목요일
  57. 57. LIVE CODING https://github.com/npcode/git-internal-demo12년 8월 23일 목요일
  58. 58. REFS • .git/HEAD: 현재 브랜치를 가리킴 • .git/refs/heads/*: 로컬 저장소의 브랜치들 • .git/refs/remotes/*: 원격 저장소의 브랜치들12년 8월 23일 목요일
  59. 59. 커밋하는 법 • 커밋할 파일들을 blob으로 저장 • 디렉토리를 tree로 저장 • 루트 디렉토리의 sha1sum, 저자 정보, 커밋 메시지 등을 담은 commit을 저장 • 현재 브랜치 갱신12년 8월 23일 목요일
  60. 60. 12년 8월 23일 목요일
  61. 61. Hello, World!12년 8월 23일 목요일
  62. 62. 8ab68 (greet)12년 8월 23일 목요일
  63. 63. 100644 greet 8ab68 8ab68 (greet)12년 8월 23일 목요일
  64. 64. 100644 greet 8ab68 8ab68 (greet)12년 8월 23일 목요일
  65. 65. c97aa 8ab68 (greet)12년 8월 23일 목요일
  66. 66. tree c97aa author Yi committer Yi the first commit! c97aa 8ab68 (greet)12년 8월 23일 목요일
  67. 67. tree c97aa author Yi committer Yi the first commit! c97aa 8ab68 (greet)12년 8월 23일 목요일
  68. 68. 15c68 c97aa 8ab68 (greet)12년 8월 23일 목요일
  69. 69. HEAD refs/heads/master 15c68 c97aa 8ab68 (greet)12년 8월 23일 목요일
  70. 70. HEAD refs/heads/master 15c68 c97aa 8ab68 (greet)12년 8월 23일 목요일
  71. 71. HEAD refs/heads/master 15c68 c97aa 8ab68 Bye, World! (greet)12년 8월 23일 목요일
  72. 72. HEAD refs/heads/master 15c68 c97aa 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  73. 73. HEAD refs/heads/master 15c68 c97aa 100644 greet 02c8f 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  74. 74. HEAD refs/heads/master 15c68 c97aa 100644 greet 02c8f 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  75. 75. HEAD refs/heads/master 15c68 c97aa 8f7bc 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  76. 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. 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. 78. HEAD refs/heads/master 15c68 59866 c97aa 8f7bc 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  79. 79. HEAD refs/heads/master 15c68 59866 c97aa 8f7bc 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  80. 80. HEAD refs/heads/master 15c68 59866 c97aa 8f7bc 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  81. 81. HEAD refs/heads/master 15c68 59866 c97aa 8f7bc 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  82. 82. HEAD refs/heads/master 15c68 59866 c97aa 8f7bc 8ab68 02c8f Bye, World! (greet) (greet)12년 8월 23일 목요일
  83. 83. HEAD refs/heads/master 15c68 59866 c97aa 8f7bc 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  84. 84. HEAD refs/heads/master 15c68 59866 c97aa 8f7bc 100644 bye 02c8f 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  85. 85. HEAD refs/heads/master 15c68 59866 c97aa 8f7bc 100644 bye 02c8f 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  86. 86. HEAD refs/heads/master 15c68 59866 c97aa 8f7bc cab01 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  87. 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. 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. 89. HEAD refs/heads/master 15c68 59866 95dfd c97aa 8f7bc cab01 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  90. 90. HEAD refs/heads/master 15c68 59866 95dfd c97aa 8f7bc cab01 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  91. 91. HEAD refs/heads/master 15c68 59866 95dfd c97aa 8f7bc cab01 8ab68 02c8f (greet) (greet)12년 8월 23일 목요일
  92. 92. 커밋된 파일 읽는 법 • .git/HEAD 를 읽어서 현재 브랜치를 알아냄 • 현재 브랜치를 읽어서 커밋의 sha1sum을 알아냄 • 커밋을 읽어서 루트 tree의 sha1sum을 알아냄 • 루트 tree를 읽어서 읽고자 하는 blob(파일)의 sha1sum을 알아냄 • blob(파일)을 읽음12년 8월 23일 목요일
  93. 93. 고급 - PACK 다루기 packed object 읽기12년 8월 23일 목요일
  94. 94. GIT OBJECTS • Loose object - packfile에 들어있지 않은 object • Packed object - packfile에 들어있는 object12년 8월 23일 목요일
  95. 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/gitbook12년 8월 23일 목요일
  96. 96. PACK에서 GIT OBJECT 얻는 법 • 찾고자 하는 object가 .git/objects 에 없으면, • .git/objects/pack/*.idx 를 뒤져서 object가 어느 pack의 어디 에 있는지 알아냄 • 알아낸 곳을 읽고 해석하여 object를 얻음12년 8월 23일 목요일
  97. 97. Scott Chacon. (2008). The Community Git Book.12년 8월 23일 목요일
  98. 98. Scott Chacon. (2008). The Community Git Book.12년 8월 23일 목요일
  99. 99. HEADER “377tOc” - pack signature “0002” - pack version Scott Chacon. (2008). The Community Git Book.12년 8월 23일 목요일
  100. 100. FANOUT fanout[i] = sha1sum이 i로 시 작하는 object의 갯수 Scott Chacon. (2008). The Community Git Book.12년 8월 23일 목요일
  101. 101. SHA LISTING object들의 sha1sum을 오름 차순으로 나열 Scott Chacon. (2008). The Community Git Book.12년 8월 23일 목요일
  102. 102. CRC CHECKSUM object들을 검증하기 위한 4 바이트 checksum Scott Chacon. (2008). The Community Git Book.12년 8월 23일 목요일
  103. 103. PACKFILE OFFSETS offset[i] = i번째 object의 packfile 에서의 위치 Scott Chacon. (2008). The Community Git Book.12년 8월 23일 목요일
  104. 104. LARGE PACKFILE OFFSETS 4바이트로는 표현이 안되 는 큰 offset들 Scott Chacon. (2008). The Community Git Book.12년 8월 23일 목요일
  105. 105. TRAILER packfile과 idxfile의 SHA1 Scott Chacon. (2008). The Community Git Book. checksum12년 8월 23일 목요일
  106. 106. Scott Chacon. (2008). The Community Git Book.12년 8월 23일 목요일
  107. 107. Scott Chacon. (2008). The Community Git Book.12년 8월 23일 목요일
  108. 108. Scott Chacon. (2008). The Community Git Book.12년 8월 23일 목요일
  109. 109. TYPE 별 BODY 해석방법 • OBJ_COMMIT, OBJ_TREE, OBJ_BLOB, OBJ_TAG • Git Object의 body (deflate로 압축된 상태)12년 8월 23일 목요일
  110. 110. TYPE 별 BODY 해석방법 • OBJ_REF_DELTA • body의 첫 20바이트는 base object의 sha1sum • 나머지는 base object에 대한 delta (deflate로 압축되어있 음)12년 8월 23일 목요일
  111. 111. TYPE 별 BODY 해석방법 • OBJ_OFS_DELTA • header에서 body size를 해석한 것과 같은 방법으로 해 석해서 base object에 대한 offset을 얻는다. • 나머지 부분은 base object에 대한 delta (deflate로 압축 되어있음)12년 8월 23일 목요일
  112. 112. DELTA COMPRESSION header src_size 1.
  113. 113.  첫
  114. 114.  비트가
  115. 115.  0인
  116. 116.  바이트까지
  117. 117.  모두
  118. 118.  읽는다. 2.
  119. 119.  읽어들인
  120. 120.  바이트의
  121. 121.  첫
  122. 122.  비트를
  123. 123.  제거한
  124. 124.  뒤
  125. 125.  순서대로
  126. 126.  연결한다. 3.
  127. 127.  그
  128. 128.  값을
  129. 129.  src_size로
  130. 130.  삼는다. dest_size 1.
  131. 131.  위와
  132. 132.  같은
  133. 133.  방법으로
  134. 134.  얻는다. header
  135. 135.  
  136. 136.  src_size
  137. 137.  
  138. 138.  
  139. 139.  
  140. 140.  1XXXXXXXX
  141. 141.  
  142. 142.  
  143. 143.  
  144. 144.  
  145. 145.  
  146. 146.  
  147. 147.  
  148. 148.  
  149. 149.  
  150. 150.  
  151. 151.  
  152. 152.  
  153. 153.  
  154. 154.  
  155. 155.  
  156. 156.  
  157. 157.  
  158. 158.  
  159. 159.  
  160. 160.  ... body
  161. 161.  
  162. 162.  
  163. 163.  
  164. 164.  
  165. 165.  
  166. 166.  
  167. 167.  
  168. 168.  
  169. 169.  
  170. 170.  
  171. 171.  
  172. 172.  
  173. 173.  
  174. 174.  
  175. 175.  
  176. 176.  
  177. 177.  
  178. 178.  
  179. 179.  
  180. 180.  0XXXXXXXX
  181. 181.  
  182. 182.  
  183. 183.  
  184. 184.  
  185. 185.  
  186. 186.  
  187. 187.  
  188. 188.  dest_size
  189. 189.  
  190. 190.  
  191. 191.  1XXXXXXXX 1.
  192. 192.  한
  193. 193.  바이트를
  194. 194.  읽어서
  195. 195.  모든
  196. 196.  비트가
  197. 197.  0이면
  198. 198.  에러,
  199. 199.  
  200. 200.  
  201. 201.  
  202. 202.  
  203. 203.  
  204. 204.  
  205. 205.  
  206. 206.  
  207. 207.  
  208. 208.  
  209. 209.  
  210. 210.  
  211. 211.  
  212. 212.  
  213. 213.  
  214. 214.  
  215. 215.  
  216. 216.  
  217. 217.  
  218. 218.  ... 2.
  219. 219.  첫
  220. 220.  비트가
  221. 221.  1
  222. 222.  이라면
  223. 223.  다음의
  224. 224.  규칙에
  225. 225.  따른다.
  226. 226.  
  227. 227.  
  228. 228.  
  229. 229.  
  230. 230.  
  231. 231.  
  232. 232.  
  233. 233.  
  234. 234.  
  235. 235.  
  236. 236.  
  237. 237.  
  238. 238.  
  239. 239.  
  240. 240.  
  241. 241.  
  242. 242.  
  243. 243.  
  244. 244.  
  245. 245.  0XXXXXXXX 1ABCDEFG body
  246. 246.  
  247. 247.  
  248. 248.  
  249. 249.  header
  250. 250.  
  251. 251.  
  252. 252.  
  253. 253.  
  254. 254.  
  255. 255.  0XXXXXXXX 1.
  256. 256.  DEFG를
  257. 257.  근거로
  258. 258.  cp_off,
  259. 259.  ABC를
  260. 260.  근거로
  261. 261.  cp_size를
  262. 262.  구한다.
  263. 263.  (좀
  264. 264.  특이함)
  265. 265.  
  266. 266.  
  267. 267.  
  268. 268.  1.1.
  269. 269.  G,
  270. 270.  F,
  271. 271.  E,
  272. 272.  D
  273. 273.  순서로
  274. 274.  
  275. 275.  
  276. 276.  
  277. 277.  
  278. 278.  
  279. 279.  
  280. 280.  
  281. 281.  to_dest
  282. 282.  
  283. 283.  
  284. 284.  
  285. 285.  
  286. 286.  ...
  287. 287.  
  288. 288.  
  289. 289.  
  290. 290.  1.2.
  291. 291.  1이라면
  292. 292.  pos
  293. 293.  위치의
  294. 294.  한
  295. 295.  바이트를
  296. 296.  읽고,
  297. 297.  pos에
  298. 298.  1을
  299. 299.  더한다.
  300. 300.  
  301. 301.  
  302. 302.  
  303. 303.  1.3.
  304. 304.  1인
  305. 305.  비트가
  306. 306.  E라면
  307. 307.  8비트,
  308. 308.  F라면
  309. 309.  16비트,
  310. 310.  G라면
  311. 311.  24비트를
  312. 312.  왼쪽으로
  313. 313.  shift
  314. 314.  
  315. 315.  
  316. 316.  
  317. 317.  
  318. 318.  
  319. 319.  
  320. 320.  
  321. 321.  header
  322. 322.  
  323. 323.  
  324. 324.  
  325. 325.  
  326. 326.  
  327. 327.  1XXXXXXXX 한다.
  328. 328.  
  329. 329.  
  330. 330.  
  331. 331.  1.4.
  332. 332.  위의
  333. 333.  방법으로
  334. 334.  구한
  335. 335.  값을
  336. 336.  cp_off
  337. 337.  에
  338. 338.  더한다.
  339. 339.  
  340. 340.  
  341. 341.  
  342. 342.  
  343. 343.  
  344. 344.  
  345. 345.  
  346. 346.  cp_off
  347. 347.  
  348. 348.  
  349. 349.  
  350. 350.  
  351. 351.  
  352. 352.  ...
  353. 353.  
  354. 354.  
  355. 355.  
  356. 356.  1.5.
  357. 357.  만약
  358. 358.  cp_size
  359. 359.  가
  360. 360.  0이라면
  361. 361.  65536으로
  362. 362.  바뀐다.
  363. 363.  (cp_size
  364. 364.  =
  365. 365.  cp_size
  366. 366.  ||
  367. 367.   65536)
  368. 368.  
  369. 369.  
  370. 370.  
  371. 371.  
  372. 372.  
  373. 373.  
  374. 374.  
  375. 375.  cp_size
  376. 376.  
  377. 377.  
  378. 378.  
  379. 379.  
  380. 380.  ... 2.
  381. 381.  src에서
  382. 382.  cp_off
  383. 383.  부터
  384. 384.  cp_size
  385. 385.  크기만큼
  386. 386.  읽어서
  387. 387.  dest에
  388. 388.  더한다.
  389. 389.  
  390. 390.  
  391. 391.  
  392. 392.  2.1.
  393. 393.  C,
  394. 394.  B,
  395. 395.  A
  396. 396.  순서로
  397. 397.  
  398. 398.  
  399. 399.  
  400. 400.  1.2.
  401. 401.  1이라면
  402. 402.  pos
  403. 403.  위치의
  404. 404.  한
  405. 405.  바이트를
  406. 406.  읽고,
  407. 407.  pos에
  408. 408.  1을
  409. 409.  더한다.
  410. 410.  
  411. 411.  
  412. 412.  
  413. 413.  2.3.
  414. 414.  1인
  415. 415.  비트가
  416. 416.  E라면
  417. 417.  8비트,
  418. 418.  F라면
  419. 419.  16비트,
  420. 420.  G라면
  421. 421.  24비트를
  422. 422.  왼쪽으로
  423. 423.  shift 한다. 3.
  424. 424.  첫
  425. 425.  비트가
  426. 426.  0
  427. 427.  이라면
  428. 428.  다음의
  429. 429.  규칙에
  430. 430.  따른다. 0ABCDEFG ABCDEFG
  431. 431.  바이트
  432. 432.  만큼
  433. 433.  읽어서
  434. 434.  dest에
  435. 435.  더한다. 4.
  436. 436.  그
  437. 437.  외에는
  438. 438.  에러이다.12년 8월 23일 목요일
  439. 439. DELTA COMPRESSION Git 소스코드를 읽는 것이 낫습니다. patch-delta.c12년 8월 23일 목요일
  440. 440. LICENSE •이 문서는 GPLv2 라이선스로 배포됩니다. • This document is distributed under the GPLv2.12년 8월 23일 목요일
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×