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

自作Git作った話

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 自作Git作った話

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

Avatar for garebare

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ディレクトリの中に生成される