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
3
700
自作Git作った話
NEW DEBUGで発表したものになります
garebare
March 20, 2021
Tweet
Share
More Decks by garebare
See All by garebare
ペンギンをおすすめする
garebareda
0
38
hey-techcamp-2022
garebareda
2
62
Rustで作った自作コマンド群の話
garebareda
0
160
クリーンアーキテクチャ をGoでする場合に不要な Interfaceは消しやがれ
garebareda
0
130
Rustで自作言語のインタプリタ作って Webで動くようにした話
garebareda
0
790
Vtuberをやりたくなりました
garebareda
1
74
Other Decks in Programming
See All in Programming
Hypervel - A Coroutine Framework for Laravel Artisans
albertcht
1
110
Java on Azure で LangGraph!
kohei3110
0
170
関数型まつりレポート for JuliaTokai #22
antimon2
0
160
CursorはMCPを使った方が良いぞ
taigakono
1
190
Benchmark
sysong
0
270
システム成長を止めない!本番無停止テーブル移行の全貌
sakawe_ee
1
150
A2A プロトコルを試してみる
azukiazusa1
2
1.2k
XP, Testing and ninja testing
m_seki
3
210
Bytecode Manipulation 으로 생산성 높이기
bigstark
2
380
Cursor AI Agentと伴走する アプリケーションの高速リプレイス
daisuketakeda
1
130
来たるべき 8.0 に備えて React 19 新機能と React Router 固有機能の取捨選択とすり合わせを考える
oukayuka
2
870
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
6
1.6k
Featured
See All Featured
Visualization
eitanlees
146
16k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Designing for Performance
lara
609
69k
Speed Design
sergeychernyshev
32
1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
930
YesSQL, Process and Tooling at Scale
rocio
173
14k
4 Signs Your Business is Dying
shpigford
184
22k
Thoughts on Productivity
jonyablonski
69
4.7k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
800
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Scaling GitHub
holman
459
140k
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作られるの待ってます! 最 後 パチン
ご清聴ありがとうございました。