git入門

9fbbe5d0b8e2ee1cdc3a576b55a2d63d?s=47 uzimaru0000
September 26, 2020

 git入門

Zli × エキサイト 合同LT
https://zli.connpass.com/event/188279/

9fbbe5d0b8e2ee1cdc3a576b55a2d63d?s=128

uzimaru0000

September 26, 2020
Tweet

Transcript

  1. git入門
 うじまる


  2. 自己紹介
 - B4
 - うじまる
 - Webフロントエンド
 - TypeScript
 -

    Elm
 - 最近Rustをやってます。
 - Twitter
 - @uzimaru0000
 - GitHub
 - @uzimaru0000

  3. みなさんgitは使ってますか?


  4. 使ってますね


  5. ありがとうございました!


  6. 終わりません‍♂


  7. gitの仕組み分かりますか?


  8. gitの仕組み入門
 うじまる


  9. もくじ
 - gitって?
 - gitの仕組み
 - `git add` を使わないで `git

    add` をしてみる

  10. gitって?


  11. gitって?
 Git(ギット[2][3][4])は、プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。
 (wikipediaより)
 - 分散型バージョン管理システム
 - Linux カーネルの開発者のリーナスさんが作ったシステム


  12. gitって?
 Q. 情報はどこに保存されてる?
 A. `.git` ディレクトリ以下


  13. gitって?
 - HEAD
 - `git push origin HEAD` とかで参照される 


    - index
 - いわゆるstaging
 - objects/
 - gitのobjectの保存先 
 - refs/
 - branchとかtagsの保存先 

  14. gitって?
 - HEAD
 - `git push origin HEAD` とかで参照される 


    - index
 - いわゆるstaging
 - objects/
 - gitのobjectの保存先 
 - refs/
 - branchとかtagsの保存先 

  15. git-object
 - gitは3種類のobjectによって構成されている
 - commit
 - tree
 - blob
 -

    それぞれ、commit・ディレクトリ・ファイルに対応している
 - sha1で固有のIDが割り当てられる
 - zlibで圧縮されている

  16. git-object
 フォーマットは以下のような感じ
 
 - このobjectのtype
 - bodyのbytes数
 - body(objectのtypeによって中身は変わる)


  17. git-object
 - commit
 - 親のcommit, ルートのtree, commitをした人などの情報が記録されている 
 - tree


    - ディレクトリの情報が記録されている 
 - 1つ以上のtreeやblobを持っている 
 - blob
 - ファイルの情報が記録されている 
 - `git add` した時点のファイルのスナップショット 
 ※ git は 差分 ではなく ファイルの中身すべて を保存している

  18. git-object
 sha1の作られ方
 - objectの中身を使う


  19. git-object
 結果が違う・・・・
 原因:object fileはzlibで圧縮されている


  20. git-object
 `zlib_decompress` を使ってファイルを解凍
 同じ結果になった!!


  21. git-object
 - sha1の値がそのままpathになる
 - 上2桁がディレクトリで残りがファイル名
 コンテンツからsha1が生成されるので
 同じ内容のものは重複しない!


  22. HEADとrefs/
 - HEADには現在のHEADのpathが書いてる
 - .git/refs/heads/master が今のHEAD(ブランチ) 


  23. HEADとrefs/
 - HEADの値を使って `refs/` の値を見てみる


  24. gitの仕組み


  25. git-objectの関係性


  26. git-objectの関係性


  27. git-objectの関係性


  28. git addをしてみる


  29. gitのコマンド
 - git add や git commit などのコマンド
 - これらは「磁器コマンド」と呼ばれる

    
 - git cat-file や git hash-object などのコマンド
 - これらは「配管コマンド」と呼ばれる 
 配管コマンドを組み合わせれば、磁器コマンド相当のことができる!!
 (昔はそうしていたみたい)

  30. git addをしてみる
 $ git hash-object
 - ファイルをblobにするためのコマンド
 - `-w` オプションをつけることで保存もしてくれる


    $ git update-index
 - indexをupdateしてくれる
 - optionがちょっと多い

  31. git addをしてみる


  32. DEMO


  33. まとめ
 - git の仕組みは意外とシンプル
 - git-objectのパースと配管コマンドの実装が出来たらgitは作れる


  34. None
  35. ありがとうございました!