Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
自作Git作った話
Search
garebare
March 20, 2021
Programming
780
3
Share
自作Git作った話
NEW DEBUGで発表したものになります
garebare
March 20, 2021
More Decks by garebare
See All by garebare
ペンギンをおすすめする
garebareda
0
51
hey-techcamp-2022
garebareda
2
74
Rustで作った自作コマンド群の話
garebareda
0
170
クリーンアーキテクチャ をGoでする場合に不要な Interfaceは消しやがれ
garebareda
0
150
Rustで自作言語のインタプリタ作って Webで動くようにした話
garebareda
0
860
Vtuberをやりたくなりました
garebareda
1
81
Other Decks in Programming
See All in Programming
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
210
実用!Hono RPC2026
yodaka
2
190
アーキテクチャモダナイゼーションとは何か
nwiizo
17
5.1k
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
190
Claude Code × Gemini × Ebitengine ゲーム制作素人WebエンジニアがGoでゲームを作った話
webzawa
0
130
実践CRDT
tamadeveloper
0
550
ドメインイベントでビジネスロジックを解きほぐす #phpcon_odawara
kajitack
3
760
LM Linkで(非力な!)ノートPCでローカルLLM
seosoft
0
490
事業会社でのセキュリティ長期インターンについて
masachikaura
0
250
Vibe NLP for Applied NLP
inesmontani
PRO
0
420
Liberating Ruby's Parser from Lexer Hacks
ydah
1
180
How Swift's Type System Guides AI Agents
koher
0
250
Featured
See All Featured
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
330
Darren the Foodie - Storyboard
khoart
PRO
3
3.2k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
64
53k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
250
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Building an army of robots
kneath
306
46k
How to make the Groovebox
asonas
2
2.1k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
180
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
For a Future-Friendly Web
brad_frost
183
10k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
260
Transcript
自作Git作った話 @garebare521 NewDebug #3.0
自己紹介 I’m Batman 自 己 紹 介 名前:ガレバレ Twitter:@garebare521 作ったもの
自作Shell 自作言語 ゲーム 最近ロゴみたいなのができた インターンしたい Microsoft好き
近況 自作Shellと自作gitを作った後ゲームを 一本リリースした。 ポートフォリオも更新した。
あとなんかZennで記事を2 つ書いたら2つとも トレンドに乗った
そして現在自作言語とゲームを並行して開発してます
ちなみにこのスライドLTする二ヶ月前に完成しました
本編 ゼロワン本編だけ微妙だった 本 編
Gitとは? Gitとは
例の流出事件で巻き添え食らってそうなやつ GitHubは悪くない Gitとは ?
分散バージョン管理ツール Gitとは ?
まぁ皆知ってるだろうから他の事は 飛ばしますが 64のクッパくらい飛ばす Gitとは ?
自作Gitの仕様 仕様を使用して 自 作 Gitの 仕 様
自作Gitのファイルの仕様 自 作 Gitの 仕 様 Blob Tree Commit の3種類のファイルが存在しています。
自作Gitのファイルの仕様 自 作 Gitの 仕 様 Blob は ファイルの役割 Tree は ディレクトリ、他のTreeのハッシュやBlobのハッシュ
Commit は Treeのハッシュ、前のコミットの情報 それぞれこのような情報を有している
Blobの中身 自 作 Gitの 仕 様 Blobの 中 身 Blob
{サイズ}\0{ファイルの中身} この部分は自作GitもGitも同じ。
Treeの中身 自 作 Gitの 仕 様 Treeの 中 身 tree
{サイズ}\0 tree {Treeのハッシュ} {ディレクトリのパス}\n blob {Blobのハッシュ} {ファイルのパス}\n 多分ここはGitと違う。
Commitの中身 Gitの 仕 様 Com m itの 中 身 commit
{サイズ}\0 tree {Treeのハシッシュ} bfore{前のCommitのハッシュ} ここはGitと全然違う。
ハッシュの生成 Blobだと Blob {サイズ}\0{ファイルの中身} これ全部をSHA-1でハッシュ値にする。
ファイルの生成 各種ファイルはzlibで圧縮されファイル名を ハッシュにして生成される
初めに実装した箇所 馴れ初め 初 め に 実 装 した 箇 所
とりあえず init コマンドから実装した 初 め に 実 装 した 箇
所 initコ マ ン ド .smallgit /index /refs /refs/main /objects 以上のファイルが生成される。
とりあえず init コマンドから実装した 初 め に 実 装 した 箇
所 initコ マ ン ド .smallgit /index addしたファイルがメモされるファイル /refs ブランチが入るディレクトリ /refs/main mainブランチ、ファイルの中に最新のCmmitハッシュ /objects Commit、TreeやBlobファイルが全てはいる
実装したコマンド 実 装 した コマ ン ド コマンドだからコマンドーは安易
add コマンド 実 装 した コマ ン ド add コ
マ ン ド 前回のコミットと見比べながらステータスと一緒にindex書き込む 前回のコミットのblobのハッシュと現在のblobハッシュが違えば edit 前回のコミットのTreeにパスがなければ create パスが前回のコミットのTreeにあって現在に存在しなければ delete {ステータス} {パス} {ハッシュ} このコマンドが実行された時点でファイルから生成されたBlobが objectsディレクトリの中に生成される
commitコマンド indexファイルにメモしたパスとハッシュを読み込んでTreeファイルを 生成する。 パスからディレクトリを抽出したり、ツリー構造にして書き込んだりす る、結構複雑。 Commitを生成してブランチにハッシュを書き込む 実 装 した コマ
ン ド com m itコ マ ン ド
もうちょっとcommitコマンド 前回のコミットから比較して違う場所のTreeも差し替えなければなら ないので前回のコミットも読み込んで保持しておく。 今回のTreeのハッシュと前回のハッシュが違えば差し替える。 ただ一つのTreeが違えば芋づる式に違うの総入れ替えになってしま う。 実 装 した コマ
ン ド com m itコ マ ン ド
結構Gitっぽくなってきた 結 構 Gitぽ くな って きた それっぽい
というかコミットができたらすでにGitでは 結 構 Gitぽ くな って きた それっぽい
中身見れねぇじゃねぇか! 中 身 み れ な い 中 身 見
れ な い 中身みれない
catコマンド cat {ハッシュ}でファイルの中身が見れる BlobとCommitはそのまま中身を表示 Treeはディレクトリとファイルを段々に表示してくれる 実 装 した コマ ン
ド catコ マ ン ド にゃーん
比較して差分とかは出せないまぁできた
最後に 最 後 誰がストーンとガントレットを
これ用のGithub作られるの待ってます! 最 後 パチン
ご清聴ありがとうございました。