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
uzimaru0000
September 26, 2020
Technology
1
290
git入門
Zli × エキサイト 合同LT
https://zli.connpass.com/event/188279/
uzimaru0000
September 26, 2020
Tweet
Share
More Decks by uzimaru0000
See All by uzimaru0000
OGPを使いたい
uzimaru0000
0
150
Webフロントエンド入門
uzimaru0000
1
410
WebフロントエンジニアはOSの夢を見る
uzimaru0000
0
340
BrainFuckをつくった
uzimaru0000
0
350
Elmで作るCLI
uzimaru0000
0
120
Blogを作った話 -Zli x DeNA-
uzimaru0000
1
160
Compression Vue App
uzimaru0000
0
110
好きなライブラリ_OSS
uzimaru0000
0
200
Other Decks in Technology
See All in Technology
Autonomous Database - Dedicated 技術詳細 / adb-d_technical_detail_jp
oracle4engineer
PRO
2
4.9k
The Twelve-Factor App とクラウドアプリケーションのコスト
ny7760
3
260
AWS IAM の結果整合性を避けるためセッションポリシーを用いてポリシーの動作確認を行う、を解説する
yukihirochiba
0
370
[AWS Expert Online for JAWS-UG]AWS SAW を使ったトラブルシューティング効率化のススメ
furuton
0
160
【Cyber-sec+】ログの森で出会ったCloudTrail との奇妙な旅
hssh2_bin
1
220
B+木入門:PHPで理解する データベースインデックスの仕組み/b-plus-tree-101
hanhan1978
5
2.7k
ECS on FargateへのSeekable OCI導入レポート
iwamot
0
260
スケジュール指定のFargate Spotと友達になれた話
news_it_enj
0
240
【OpenAI本出版記念】npakaによるOpenAI最新技術情報と技術情報キャッチアップ術
npaka
8
1.4k
理想の組織も自分たちで作ろう! ―LayerXの「全員採用」を支える文化 / How to create our own ideal team
ar_tama
6
2.1k
How to Build a Strong Engineering Culture
alperhankendi
0
120
layerx-0-to-1-product-development-in-compound-startups
shnjtk
1
510
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
40
12k
JazzCon 2018 Closing Keynote - Leadership for the Reluctant Leader
reverentgeek
178
11k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
1
1.2k
Statistics for Hackers
jakevdp
789
220k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
14
1.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
8
8.2k
Building a Scalable Design System with Sketch
lauravandoore
455
32k
Automating Front-end Workflow
addyosmani
1353
200k
Fireside Chat
paigeccino
19
2.5k
Ruby is Unlike a Banana
tanoku
95
10k
Design by the Numbers
sachag
274
18k
Transcript
git入門 うじまる
自己紹介 - B4 - うじまる - Webフロントエンド - TypeScript -
Elm - 最近Rustをやってます。 - Twitter - @uzimaru0000 - GitHub - @uzimaru0000
みなさんgitは使ってますか?
使ってますね
ありがとうございました!
終わりません♂
gitの仕組み分かりますか?
gitの仕組み入門 うじまる
もくじ - gitって? - gitの仕組み - `git add` を使わないで `git
add` をしてみる
gitって?
gitって? Git(ギット[2][3][4])は、プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。 (wikipediaより) - 分散型バージョン管理システム - Linux カーネルの開発者のリーナスさんが作ったシステム
gitって? Q. 情報はどこに保存されてる? A. `.git` ディレクトリ以下
gitって? - HEAD - `git push origin HEAD` とかで参照される
- index - いわゆるstaging - objects/ - gitのobjectの保存先 - refs/ - branchとかtagsの保存先
gitって? - HEAD - `git push origin HEAD` とかで参照される
- index - いわゆるstaging - objects/ - gitのobjectの保存先 - refs/ - branchとかtagsの保存先
git-object - gitは3種類のobjectによって構成されている - commit - tree - blob -
それぞれ、commit・ディレクトリ・ファイルに対応している - sha1で固有のIDが割り当てられる - zlibで圧縮されている
git-object フォーマットは以下のような感じ - このobjectのtype - bodyのbytes数 - body(objectのtypeによって中身は変わる)
git-object - commit - 親のcommit, ルートのtree, commitをした人などの情報が記録されている - tree
- ディレクトリの情報が記録されている - 1つ以上のtreeやblobを持っている - blob - ファイルの情報が記録されている - `git add` した時点のファイルのスナップショット ※ git は 差分 ではなく ファイルの中身すべて を保存している
git-object sha1の作られ方 - objectの中身を使う
git-object 結果が違う・・・・ 原因:object fileはzlibで圧縮されている
git-object `zlib_decompress` を使ってファイルを解凍 同じ結果になった!!
git-object - sha1の値がそのままpathになる - 上2桁がディレクトリで残りがファイル名 コンテンツからsha1が生成されるので 同じ内容のものは重複しない!
HEADとrefs/ - HEADには現在のHEADのpathが書いてる - .git/refs/heads/master が今のHEAD(ブランチ)
HEADとrefs/ - HEADの値を使って `refs/` の値を見てみる
gitの仕組み
git-objectの関係性
git-objectの関係性
git-objectの関係性
git addをしてみる
gitのコマンド - git add や git commit などのコマンド - これらは「磁器コマンド」と呼ばれる
- git cat-file や git hash-object などのコマンド - これらは「配管コマンド」と呼ばれる 配管コマンドを組み合わせれば、磁器コマンド相当のことができる!! (昔はそうしていたみたい)
git addをしてみる $ git hash-object - ファイルをblobにするためのコマンド - `-w` オプションをつけることで保存もしてくれる
$ git update-index - indexをupdateしてくれる - optionがちょっと多い
git addをしてみる
DEMO
まとめ - git の仕組みは意外とシンプル - git-objectのパースと配管コマンドの実装が出来たらgitは作れる
None
ありがとうございました!