Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Gitのつくりかた
How to make a Git
YAPC::Asia 2015 @DQNEO
@DQNEO (どきゅねお)
就職しますた
Got a job !!
Gitを理解する最良の方法、
それは自分でGitを
実装してみることです
Gitを理解する最良の方法、
それは自分でGitを
実装してみることです
̶ DQNEO ̶
Gitとは何か?
What is Git ?
バージョン管理システム
Version Controle System
バージョン管理システム
Version Controle System
見方を変えてみよう
Take a look in another way
中から見た場合
View inside
コンテンツ管理システム
Contents Management System
コンテンツとは何か?
What is Content ?
ソースコードだったり
Source Code
画像だったり
Image
Gitはコンテンツをどのように
格納しているのか?
How does Git
store contents?
キーバリューストア
Key Value Store
Key
3b18e512dba79e4c8300dd08aeb37f8e728b8dad
sha1 hash
.git/objects/3b/18e2. . . .
Key
$ hexdump -C .git/objects/3b/18e512…
78 01 4b ca c9 4f 52 30 34 62 c8 48 cd c9
c9 57 28 cf 2f ca 49 e1 02 00 44 11 06 89
V...
Valueの作り方
hello worldn
Valueの作り方
hello worldn
=> 12 bytes
Valueの作り方
blob 120hello worldn
Valueの作り方
blob 120hello worldn
↑これをzlib圧縮する
$ hexdump -C .git/objects/3b/18e512…
78 01 4b ca c9 4f 52 30 34 62 c8 48 cd c9
c9 57 28 cf 2f ca 49 e1 02 00 44 11 06 89
V...
圧縮して保存 : git add
解凍して取得 : git cat-file -p
作ってみよう!11
Let s make it !!
git cat-file -p
=> KVSからgetするコマンド
zlib解凍
$ my_git_cat_file-p 18/e512dba79e4c830
hello world
my_git_cat_file-pコマンド
これを応用すれば
git checkout ができる
こんな感じで1個ずつサブ
コマンドを作っていけば
Gitはつくれる!!
You can make a Git !!
https://github.com/DQNEO/minigit
作ってみた(途中まで)
ご清聴ありがとうございました。
Thank you !
人材募集中!
We are hiring !
Upcoming SlideShare
Loading in …5
×

Gitのつくりかた YAPC::Asia 2015 @DQNEO

15,855 views

Published on

Gitはつくれる!!11
YAPC::Asia 2015のLT発表資料です。

Published in: Engineering
  • Be the first to comment

Gitのつくりかた YAPC::Asia 2015 @DQNEO

  1. 1. Gitのつくりかた How to make a Git YAPC::Asia 2015 @DQNEO
  2. 2. @DQNEO (どきゅねお)
  3. 3. 就職しますた Got a job !!
  4. 4. Gitを理解する最良の方法、 それは自分でGitを 実装してみることです
  5. 5. Gitを理解する最良の方法、 それは自分でGitを 実装してみることです ̶ DQNEO ̶
  6. 6. Gitとは何か? What is Git ?
  7. 7. バージョン管理システム Version Controle System
  8. 8. バージョン管理システム Version Controle System
  9. 9. 見方を変えてみよう Take a look in another way
  10. 10. 中から見た場合 View inside
  11. 11. コンテンツ管理システム Contents Management System
  12. 12. コンテンツとは何か? What is Content ?
  13. 13. ソースコードだったり Source Code
  14. 14. 画像だったり Image
  15. 15. Gitはコンテンツをどのように 格納しているのか? How does Git store contents?
  16. 16. キーバリューストア Key Value Store
  17. 17. Key 3b18e512dba79e4c8300dd08aeb37f8e728b8dad sha1 hash
  18. 18. .git/objects/3b/18e2. . . . Key
  19. 19. $ hexdump -C .git/objects/3b/18e512… 78 01 4b ca c9 4f 52 30 34 62 c8 48 cd c9 c9 57 28 cf 2f ca 49 e1 02 00 44 11 06 89 Value zlib圧縮されたナニカ
  20. 20. Valueの作り方 hello worldn
  21. 21. Valueの作り方 hello worldn => 12 bytes
  22. 22. Valueの作り方 blob 120hello worldn
  23. 23. Valueの作り方 blob 120hello worldn ↑これをzlib圧縮する
  24. 24. $ hexdump -C .git/objects/3b/18e512… 78 01 4b ca c9 4f 52 30 34 62 c8 48 cd c9 c9 57 28 cf 2f ca 49 e1 02 00 44 11 06 89 Value
  25. 25. 圧縮して保存 : git add 解凍して取得 : git cat-file -p
  26. 26. 作ってみよう!11 Let s make it !!
  27. 27. git cat-file -p => KVSからgetするコマンド
  28. 28. zlib解凍
  29. 29. $ my_git_cat_file-p 18/e512dba79e4c830 hello world my_git_cat_file-pコマンド
  30. 30. これを応用すれば git checkout ができる
  31. 31. こんな感じで1個ずつサブ コマンドを作っていけば
  32. 32. Gitはつくれる!! You can make a Git !!
  33. 33. https://github.com/DQNEO/minigit 作ってみた(途中まで)
  34. 34. ご清聴ありがとうございました。 Thank you !
  35. 35. 人材募集中! We are hiring !

×