NEW DEBUGで発表したものになります
自作Git作った話@garebare521NewDebug #3.0
View Slide
自己紹介I’m Batman自己紹介名前:ガレバレTwitter:@garebare521作ったもの 自作Shell 自作言語 ゲーム最近ロゴみたいなのができたインターンしたいMicrosoft好き
近況自作Shellと自作gitを作った後ゲームを一本リリースした。ポートフォリオも更新した。
あとなんかZennで記事を2つ書いたら2つともトレンドに乗った
そして現在自作言語とゲームを並行して開発してます
ちなみにこのスライドLTする二ヶ月前に完成しました
本編ゼロワン本編だけ微妙だった本編
Gitとは?Gitとは
例の流出事件で巻き添え食らってそうなやつGitHubは悪くないGitとは?
分散バージョン管理ツールGitとは?
まぁ皆知ってるだろうから他の事は飛ばしますが64のクッパくらい飛ばすGitとは?
自作Gitの仕様仕様を使用して自作Gitの仕様
自作Gitのファイルの仕様自作Gitの仕様BlobTreeCommitの3種類のファイルが存在しています。
自作Gitのファイルの仕様自作Gitの仕様Blob は ファイルの役割Tree は ディレクトリ、他のTreeのハッシュやBlobのハッシュCommit は Treeのハッシュ、前のコミットの情報それぞれこのような情報を有している
Blobの中身自作Gitの仕様Blobの中身Blob {サイズ}\0{ファイルの中身}この部分は自作GitもGitも同じ。
Treeの中身自作Gitの仕様Treeの中身tree {サイズ}\0tree {Treeのハッシュ} {ディレクトリのパス}\nblob {Blobのハッシュ} {ファイルのパス}\n多分ここはGitと違う。
Commitの中身Gitの仕様Commitの中身commit {サイズ}\0tree {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を生成してブランチにハッシュを書き込む実装したコマンドcommitコマンド
もうちょっとcommitコマンド前回のコミットから比較して違う場所のTreeも差し替えなければならないので前回のコミットも読み込んで保持しておく。今回のTreeのハッシュと前回のハッシュが違えば差し替える。ただ一つのTreeが違えば芋づる式に違うの総入れ替えになってしまう。実装したコマンドcommitコマンド
結構Gitっぽくなってきた結構Gitぽくなってきたそれっぽい
というかコミットができたらすでにGitでは結構Gitぽくなってきたそれっぽい
中身見れねぇじゃねぇか!中身みれない中身見れない中身みれない
catコマンドcat {ハッシュ}でファイルの中身が見れるBlobとCommitはそのまま中身を表示Treeはディレクトリとファイルを段々に表示してくれる実装したコマンドcatコマンドにゃーん
比較して差分とかは出せないまぁできた
最後に最後誰がストーンとガントレットを
これ用のGithub作られるの待ってます!最後パチン
ご清聴ありがとうございました。