35
Gitのつくりかた How to make a Git YAPC::Asia 2015 @DQNEO

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

  • Upload
    dqneo

  • View
    13.419

  • Download
    0

Embed Size (px)

Citation preview

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

Gitのつくりかた How to make a Git

YAPC::Asia 2015 @DQNEO

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

@DQNEO (どきゅねお)

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

就職しますた Got a job !!

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

“Gitを理解する最良の方法、 それは自分でGitを

実装してみることです”

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

“Gitを理解する最良の方法、 それは自分でGitを

実装してみることです” ̶ DQNEO ̶

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

Gitとは何か? What is Git ?

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

バージョン管理システム Version Controle System

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

バージョン管理システム Version Controle System

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

見方を変えてみよう Take a look in another way

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

中から見た場合 View inside

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

コンテンツ管理システム Contents Management System

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

コンテンツとは何か? What is Content ?

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

ソースコードだったり Source Code

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

画像だったり Image

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

Gitはコンテンツをどのように 格納しているのか?

How does Git store contents?

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

キーバリューストア Key Value Store

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

Key

3b18e512dba79e4c8300dd08aeb37f8e728b8dad

sha1 hash

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

.git/objects/3b/18e2. . . .

Key

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

$ 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圧縮されたナニカ

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

Valueの作り方

“hello world\n”

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

Valueの作り方

“hello world\n”=> 12 bytes

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

Valueの作り方

“blob 12\0hello world\n”

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

Valueの作り方

“blob 12\0hello world\n”↑これをzlib圧縮する

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

$ 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

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

圧縮して保存 : git add 解凍して取得 : git cat-file -p

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

作ってみよう!11 Let’s make it !!

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

git cat-file -p => KVSからgetするコマンド

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

zlib解凍

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

$ my_git_cat_file-p 18/e512dba79e4c830 hello world

my_git_cat_file-pコマンド

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

これを応用すれば git checkout ができる

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

こんな感じで1個ずつサブコマンドを作っていけば

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

Gitはつくれる!! You can make a Git !!

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

https://github.com/DQNEO/minigit

作ってみた(途中まで)

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

ご清聴ありがとうございました。 Thank you !

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

人材募集中! We are hiring !