Suche senden
Hochladen
やさしいGitの内部構造 - yapcasia2013
•
Als PPTX, PDF herunterladen
•
35 gefällt mir
•
15,628 views
D
DQNEO
Folgen
Gitの内部構造についてのわかりやすい解説です。
Weniger lesen
Mehr lesen
Melden
Teilen
Melden
Teilen
1 von 68
Jetzt herunterladen
Empfohlen
こわくない Git
こわくない Git
Kota Saito
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
Masakazu Matsushita
やりなおせる Git 入門
やりなおせる Git 入門
Tomohiko Himura
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
Observableで非同期処理
Observableで非同期処理
torisoup
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
Empfohlen
こわくない Git
こわくない Git
Kota Saito
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
Masakazu Matsushita
やりなおせる Git 入門
やりなおせる Git 入門
Tomohiko Himura
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
Observableで非同期処理
Observableで非同期処理
torisoup
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
Marp Tutorial
Marp Tutorial
Rui Watanabe
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
Map
Map
kikairoya
Gitの便利ワザ
Gitの便利ワザ
ktateish
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
Yuki Tamura
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
日本語テストメソッドについて
日本語テストメソッドについて
kumake
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Jun-ichi Sakamoto
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
UniRx完全に理解した
UniRx完全に理解した
torisoup
深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル
Yuta Kashino
Django で始める PyCharm 入門
Django で始める PyCharm 入門
kashew_nuts
Weitere ähnliche Inhalte
Was ist angesagt?
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
Marp Tutorial
Marp Tutorial
Rui Watanabe
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
Map
Map
kikairoya
Gitの便利ワザ
Gitの便利ワザ
ktateish
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
Yuki Tamura
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
日本語テストメソッドについて
日本語テストメソッドについて
kumake
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Jun-ichi Sakamoto
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
UniRx完全に理解した
UniRx完全に理解した
torisoup
Was ist angesagt?
(20)
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Marp Tutorial
Marp Tutorial
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Map
Map
Gitの便利ワザ
Gitの便利ワザ
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
Pythonによる黒魔術入門
Pythonによる黒魔術入門
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
日本語テストメソッドについて
日本語テストメソッドについて
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
UniRx完全に理解した
UniRx完全に理解した
Ähnlich wie やさしいGitの内部構造 - yapcasia2013
深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル
Yuta Kashino
Django で始める PyCharm 入門
Django で始める PyCharm 入門
kashew_nuts
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
Hisateru Tanaka
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Katsuhiro Morishita
#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身
Hisateru Tanaka
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46
civicpg
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEG
Jun Okazaki
サードパーティパッケージの歩き方
サードパーティパッケージの歩き方
Takesxi Sximada
Metahub for github
Metahub for github
Suguru Oho
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Katsuhiro Morishita
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
kimulla
Python & PyConJP 2014 Report
Python & PyConJP 2014 Report
gree_tech
Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent Bit
Seiya Mizuno
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
You&I
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45
civic Sasaki
211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する
Takuya Nishimoto
PIAXで作る P2Pネットワーク
PIAXで作る P2Pネットワーク
祐司 伊藤
Kerasで深層学習を実践する
Kerasで深層学習を実践する
Kazuaki Tanida
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
Daisuke Miyakawa
Ähnlich wie やさしいGitの内部構造 - yapcasia2013
(20)
深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル
Django で始める PyCharm 入門
Django で始める PyCharm 入門
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEG
サードパーティパッケージの歩き方
サードパーティパッケージの歩き方
Metahub for github
Metahub for github
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
Python & PyConJP 2014 Report
Python & PyConJP 2014 Report
Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent Bit
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45
211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する
PIAXで作る P2Pネットワーク
PIAXで作る P2Pネットワーク
Kerasで深層学習を実践する
Kerasで深層学習を実践する
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
Mehr von DQNEO
PHPの戻り値型宣言でselfを使ってみよう
PHPの戻り値型宣言でselfを使ってみよう
DQNEO
Git tips by symbols
Git tips by symbols
DQNEO
Introduction to Guzzle
Introduction to Guzzle
DQNEO
install PHP7 on CentOS7 by Ansible
install PHP7 on CentOS7 by Ansible
DQNEO
Dependency Injection and Pimple
Dependency Injection and Pimple
DQNEO
Gitのつくりかた YAPC::Asia 2015 @DQNEO
Gitのつくりかた YAPC::Asia 2015 @DQNEO
DQNEO
plenv時代のImageMagick && Image::Magickインストール方法
plenv時代のImageMagick && Image::Magickインストール方法
DQNEO
Gitの内部構造を 調べてみたら・・・
Gitの内部構造を 調べてみたら・・・
DQNEO
桐島、ファイルに 保存するの やめるってよ
桐島、ファイルに 保存するの やめるってよ
DQNEO
Mehr von DQNEO
(9)
PHPの戻り値型宣言でselfを使ってみよう
PHPの戻り値型宣言でselfを使ってみよう
Git tips by symbols
Git tips by symbols
Introduction to Guzzle
Introduction to Guzzle
install PHP7 on CentOS7 by Ansible
install PHP7 on CentOS7 by Ansible
Dependency Injection and Pimple
Dependency Injection and Pimple
Gitのつくりかた YAPC::Asia 2015 @DQNEO
Gitのつくりかた YAPC::Asia 2015 @DQNEO
plenv時代のImageMagick && Image::Magickインストール方法
plenv時代のImageMagick && Image::Magickインストール方法
Gitの内部構造を 調べてみたら・・・
Gitの内部構造を 調べてみたら・・・
桐島、ファイルに 保存するの やめるってよ
桐島、ファイルに 保存するの やめるってよ
やさしいGitの内部構造 - yapcasia2013
1.
やさしい Gitの内部構造 YAPC::Asia2013 @DQNEO
2.
@DQNEO 自己紹介 • PHPプログラマ • CPAN
Author (いちおう)
3.
4.
オープンソース作品 https://github.com/DQNEO/S3ParallelUploader https://github.com/DQNEO/ethnam https://github.com/DQNEO/Amazon-S3-FastUploader Java: S3ParallelUploader Perl: Amazon::S3::FastUploader PHP:
Ethnam
5.
ブログ
6.
はじめに ※本プレゼンはわかりやすさを優先 したため、一部記述の厳密性を犠牲 にしております。 ご了承ください。m(__)m
7.
本日のゴール • コミットの中身を知る • ブランチの正体を知る •
ポインタと連想配列 • オブジェクトグラフを理解する
8.
きっかけ
9.
Git使って ますか?
10.
• 毎日使ってる • たまに使う •
使ったことない • 他のVCSがメイン
11.
コミットとは
12.
動詞:「コミットする」 名詞:「コミット」 二つの意味
13.
「コミットする」 実際の挙動は どうなってるの?
14.
Q. “git commit”により作 成されるものは? 1.
差分 2. スナップショット
15.
正解 1. 差分 2. スナップショット
16.
間違えても 気にしないで!
17.
「コミットする」 スナップショットを保存す ること =
18.
スナップ ショット コミット オブジェクト db23d002c336f1ed408c2ef82b7ccb6a33c9f24cハッシュ値
19.
名詞としての「コミット」 =スナップショット へのポインタ コミットオブジェクト = コミットハッシュ値が指し示すもの =
20.
Q. 1億行のファイルを コミットしたときの コミットオブジェクトの サイズは? 1. でかい(1MB以上) 2.
小さい(1KB未満)
21.
1億?
22.
100,000,000
23.
24.
25.
git checkout -
26.
Q. 1億行のファイルを コミットしたときの コミットオブジェクトの サイズは? 1. でかい(1MB以上) 2.
小さい(1KB未満)
27.
1. でかい 2. 小さい 正解
28.
コミット1 コミットオブジェクトのサイズは、 コンテンツのサイズによらずほぼ一定 コミット2 コミット オブジェクト スナップ ショット
29.
Gitを理解する鍵 「ポインタ」 ※C言語のポインタとは関係ないよ 単に「参照」「指し示す」 くらいの意味
30.
スナップ ショット コミット オブジェクト db23d002c336f1ed408c2ef82b7ccb6a33c9f24c コミット ハッシュ値 指し示す 指し示す
31.
コミットオブジェクトの 中身を見てみよう
32.
コミットオブジェクト あああ $ git cat-file
-p 6e3c7a7 たったのこれだけ。 メタ情報しかない。 tree b2ba084f61385d9560daa1b43a98014c27620cee parent 365d440b4c1ab31703ccbb7e2a9980d49cf8ebf6 parent 93f2ceeb0f0608f3754d379dcc473297ad1f0f43 author Tatsuhiko Miyagawa <miyagawa@xxxx.net> committer Tatsuhiko Miyagawa <miyagawa@xxxx.net> Merge pull request #430 from kazeburo/master ← コミットハッシュ値を指定
33.
$ git cat-file
-p 6e3c7a7 tree: スナップショットへのポインタ ← コミットオブジェクトの中身を表示 parent: 親コミットへのポインタ コミットオブジェクト tree b2ba084f61385d9560daa1b43a98014c27620cee parent 365d440b4c1ab31703ccbb7e2a9980d49cf8ebf6 parent 93f2ceeb0f0608f3754d379dcc473297ad1f0f43 author Tatsuhiko Miyagawa <miyagawa@xxxx.net> committer Tatsuhiko Miyagawa <miyagawa@xxxx.net> Merge pull request #430 from kazeburo/master
34.
親 子 A B コミットオブジェクト は、 親コミットへのポインタ を持っている
35.
親 子 A C 孫 B ポインタを先祖へた どっていくと 履歴がわかる
36.
Q. 1億行のテキスト ファイルに、1行追記し てコミットすると、レポ ジトリ容量はどのくらい 増える? 1. 1行分増える 2.
1億1行分増える
37.
正解 1. 1行分増える 2. 1億1行分増える
38.
コミット1 のスナップショット レポジトリ内では、 別個のオブジェクトとして共存 コミット2 のスナップショット 1億行 1億1行
39.
コミット1 のスナップショット “git log –p”や”git
show”で見れる差分 は、 あくまで計算による導出物であるコミット2 のスナップショット 差分
40.
スナップショット の構造
41.
ルート README.md META.json Tree Object Blob Object
(コンテンツ) (Plackの例) lib scripts HTTP Message PSGI.pm plackup ポインタの連鎖による階層構造
42.
$ git ls-tree
HEAD 100644 blob ba2434a0ebdb210e048f2e688652436569e4ffdc .gitignore 100644 blob e6bb679f9e41bc960f72b08b66c6ed46d4c90d4c .mailmap 100644 blob 5533888a0be3813e787cf17c60587fe313c6c23d .travis.yml 100644 blob 362d01e6f7b18e450f0a62187554e64c84f5cb10 Changes 100644 blob 0e07fb7a9173428f3b0f58035a781687bef06542 LICENSE 100644 blob 717d88241a49c58e4d811b555abdc9987a202e3c META.json 100644 blob 5d4062017fb9fe2631691b36a5167ad1d33bb79e Makefile.PL 100644 blob df73cecb9a6771392f8ffb4bbf46ad1057953338 README.md 040000 tree 17d81860c97909ce36c3a7bcd2ea2d89706e4cd1 benchmarks 100644 blob 9dca1adad84d3d4e57e297c2b4f57eaa0a54e3db cpanfile 100644 blob b1835cef488b7ad7cdee62882c4325851ce0404c dist.ini 040000 tree 16c9b6ece58b6028c10f0d983de5781c0cabb964 eg 040000 tree 206a4bef7128a678a020126744b058cbbea6bcac lib 040000 tree 359858f5219cd2e5f5171012e1b8f5f0da684301 script 040000 tree 38100c96e5798b5a513f95b36b85af38a377d5d9 share 040000 tree 8af8046f440af59731f8e93b48d62228ecfb8d83 t 040000 tree d2d27ab4124b7cf8194282c7493001543850bd0f xt ツリーオブジェクトの中身
43.
タグとは
44.
タグのない世界 Plackの 8c461ae102afbcbbe279bffb171244b710650da1 の件なんだけどさー えっ?
45.
タグのない世界 だから、Plackのコミット 8c461ae102afbcbbe279bffb171244b710650da1 の話なんだけどさー えっ? それなんだっけ?
46.
えっ? 馬鹿なの? 死ぬの? タグのない世界 コミットハッシュ値と か 覚えてないんだけど
47.
タグのある世界 ( ・ω・) _ _
つ/ ̄ ̄ ̄/ \/___/ ̄  ̄ Miyagawa氏 git tag 1.0000 8c461ae Plackの”1.0000” の件なんだけどさー あー、はいはい
48.
タグのある世界 git show 1.0000
git show 8c461ae= 等価 タグ 1.0000 コミット 8c461ae= 等価
49.
タグとは コミットオブジェクト に付けられた 別名のこと
50.
ブランチとは
51.
枝じゃない!!
52.
Gitに 枝という概念はな い。 たぶんないはず。
53.
ブランチも コミットオブジェクトの 別名。
54.
親 A branchX
55.
親 子 A B branchX コミットすると参照先が 勝手に移動
56.
親 子 A C 孫 B branchX Like
“だるまさんがころんだ”
57.
ブランチの正体 $ cat .git/refs/heads/master 6e3c7a777a7231ff9bbce276e675b16f43287bef コミットハッシュ値を格納した単なるファイル コミットオブジェクトへのポインタ
58.
ブランチは コミットオブジェクトの 別名 git show master
git show 8c461ae= 等価 git log master git log 8c461ae= 等価
59.
アレで たとえる
60.
家康 将軍
61.
家康 秀忠 将軍
62.
家康 秀忠 家光 将軍 ブランチ
! = 徳川家
63.
家康 秀忠 家光 将軍 タグ 東照大権現 ブランチ
64.
• 差分ではなくスナップショット • コミットオブジェクトは、スナッ プショットへのポインタ •
タグはコミットオブジェクトへの ポインタ • ブランチもコミットへのポインタ • Gitのデータ構造はポインタの連鎖 = オブジェクトグラフ まとめ
65.
内部構造を知っていれば色々捗る つまり
66.
67.
ご清聴 ありがとう ございました
68.
質問を どうぞ!
Jetzt herunterladen