Upgrade to Pro — share decks privately, control downloads, hide ads and more …

自作Git作った話

 自作Git作った話

NEW DEBUGで発表したものになります

garebare

March 20, 2021
Tweet

More Decks by garebare

Other Decks in Programming

Transcript

  1. 自己紹介 I’m Batman 自 己 紹 介 名前:ガレバレ Twitter:@garebare521 作ったもの

     自作Shell  自作言語  ゲーム 最近ロゴみたいなのができた インターンしたい Microsoft好き
  2. 自作Gitのファイルの仕様 自 作 Gitの 仕 様 Blob  は ファイルの役割 Tree  は ディレクトリ、他のTreeのハッシュやBlobのハッシュ

    Commit は Treeのハッシュ、前のコミットの情報 それぞれこのような情報を有している
  3. Blobの中身 自 作 Gitの 仕 様 Blobの 中 身 Blob

    {サイズ}\0{ファイルの中身} この部分は自作GitもGitも同じ。
  4. Treeの中身 自 作 Gitの 仕 様 Treeの 中 身 tree

    {サイズ}\0 tree {Treeのハッシュ} {ディレクトリのパス}\n blob {Blobのハッシュ} {ファイルのパス}\n 多分ここはGitと違う。
  5. Commitの中身 Gitの 仕 様 Com m itの 中 身 commit

    {サイズ}\0 tree {Treeのハシッシュ} bfore{前のCommitのハッシュ} ここはGitと全然違う。
  6. とりあえず init コマンドから実装した 初 め に 実 装 した 箇

    所 initコ マ ン ド .smallgit /index /refs /refs/main /objects 以上のファイルが生成される。
  7. とりあえず init コマンドから実装した 初 め に 実 装 した 箇

    所 initコ マ ン ド .smallgit /index  addしたファイルがメモされるファイル /refs   ブランチが入るディレクトリ /refs/main mainブランチ、ファイルの中に最新のCmmitハッシュ /objects  Commit、TreeやBlobファイルが全てはいる
  8. add コマンド 実 装 した コマ ン ド add コ

    マ ン ド 前回のコミットと見比べながらステータスと一緒にindex書き込む 前回のコミットのblobのハッシュと現在のblobハッシュが違えば edit 前回のコミットのTreeにパスがなければ create パスが前回のコミットのTreeにあって現在に存在しなければ delete {ステータス} {パス} {ハッシュ} このコマンドが実行された時点でファイルから生成されたBlobが objectsディレクトリの中に生成される