SlideShare a Scribd company logo
DVCSとGitの基礎
1〜200階(ズシレベル)
1階: まずは基本から
PC内のファイルの変更履歴を保存するシステム。
主な機能は、版管理されているファイルの
● 作成・変更日時
● 変更者
● 変更箇所
● 変更理由
などを保存すること。
VCSとは?
VCSの例
集中型
● VSS(Visual SourceSafe)
● SVN(Subversion)
分散型
● Git
● Mercurial
● Fossil
● Veracity
...などなど
Safe...?
SVNのイメージ(集中型)
リポジトリ
README Hello.java README Hello.java
履歴の作成
作業コピー
の更新
作業コピー
SVNの変更履歴のイメージ
README
の追加
Hello.java
の実装
README
の編集
rev: 1
rev: 2
rev: 3
リポジトリ
SVN(集中型)の特徴
● リポジトリを全員で共有
● 一般的に遅い
○ 変更の送信
○ 作業コピーの更新
○ 変更履歴の表示
● 可用性が低い
50階: DVCS
Gitのイメージ(分散型)
リポジトリ
README Hollo.java
履歴の作成
作業コピー
の更新
作業コピー
Gitのイメージ(分散型)
リポジト
リ
履歴の送信
履歴の受信
作業コピー リポジト
リ
履歴の作成
作業コピー
の更新
リポジトリ経由
Gitのイメージ(分散型)
リポジト
リ
履歴の送信
履歴の受信
作業コピー リポジト
リ
履歴の作成
作業コピー
の更新
リポジト
リ
中央
ローカル
Gitの変更履歴のイメージ
リポジトリ
リポジトリ
中央
README
の追加
rev: 1a
README
の追加rev: 1a
Gitの変更履歴のイメージ
リポジトリ リポジトリ
README
の追加
rev: 1a
リポジトリ
中央
README
の追加
rev: 1a
README
の追加rev: 1a
Gitの変更履歴のイメージ
リポジトリ リポジトリ
README
の追加
rev: 1a
Hello.java
の実装
rev: 9d
リポジトリ
中央
README
の追加
rev: 1a
READMEの
編集
rev: 5f
README
の追加rev: 1a
Gitの変更履歴のイメージ
リポジトリ リポジトリ
README
の追加
rev: 1a
Hello.java
の実装
rev: 9d
リポジトリ
中央
README
の追加
rev: 1a
READMEの
編集
rev: 5f
README
の追加rev: 1a
Hello.java
の実装
rev: 9dREADME
の編集
rev: 5f
Git(分散型)の特徴
● ローカルでの操作が速い
● ローカルの変更は他ユーザに影響しな
い(=他ユーザに影響を受けない)
● 可用性が高い
● マージが安全
○ 説明略
● 変更履歴の編集が可能
○ 説明略(200階: ハンズオンで説明)
100階: Gitのオブジェクト
オブジェクトとは?
Gitはプロジェクトの状態をオブジェクトと呼ばれる
形で記録している。オブジェクトはSHA-1で統一的
な方式で記録されるようになっている。
● blob
○ ファイルの中身を表すオブジェクト
● tree
○ ディレクトリの中身と各blobとの対応を表すオブジェクト
● commit
○ ルートツリーおよびメタデータを持つオブジェクト
● tag
○ 特定のコミットへのポインタを含むオブジェクト
● ファイルに対応する
● 右図のようなデータを作る
○ ヘッダ情報(型とサイズ)
○ ボディはファイルの中身
● zlibで圧縮 → SHA-1生成
blob
blob size
README
=========
Git Project
● ディレクトリに対応する
● 型、SHA-1、ファイル名
を記録する
● 型の種類
○ 100644 通常のファイル
○ 100755 実行可能ファイル
○ 120000 シンボリックリンク
○ 40000 ディレクトリ
○ 160000 サブモジュール
● zlibで圧縮 → SHA-1生成
tree
tree size
40000 01ab src/
100644 03bd .gitignore
100644 02ed README
● 変更履歴に対応する
● メタデータを記録
○ プロジェクトルートのtree
のSHA-1
○ 親のコミット
○ 著者、記録者(commiter)
○ ログ
○ コミット日時
● zlib圧縮 → SHA-1生成
commit
commit size
tree 5dba
parent 9f4a
author sinsoku
commiter sinsoku
READMEを追加
● タグに対応する
● メタデータを記録
○ コミットのSHA-1
○ タグ作成者
○ タグ作成日時
○ ログ
● zlibで圧縮 → SHA-1生成
tag
tag size
commit 89aa
tagger sinsoku
date 2013/04/20
v1.0.0をリリース
全体のイメージ
blob size
*.java
tree size
100644 01ab main/
100644 01ab test/
commit size
tree 5dba
author sinsoku
commiter sinsoku
READMEを追加
tree size
40000 01ab src/
100644 03bd .gitignore
100644 02ed README
blob size
README
=========
Git Project
rev: 5dbarev: 89aa
rev: 03bd
rev: 02ed
rev: 01ab
150階: Gitリポジトリの内部構造
リポジトリの内部構造
今日のハンズオンに必要な箇所を抜粋
● .git/HEAD HEAD
● .git/config リポジトリの設定ファイル
● .git/index ステージングエリア(180階)
● objects/ 各オブジェクト
● hooks/ git-hooks
● refs/ ブランチ、タグ
180階: ステージングエリア
gitのワークフロー
作業コピー
ステージング
エリア
リポジトリ
.git/objects/*
add FileName
commit
checkout
.git/index
なぜステージングがあるか?
一般的なVCS
● ファイル単位で変更をコミット
git
● 1ファイルの一部だけをコミット可
○ バグ修正、リファクタを別でコミット
○ ファイルを一部だけ元の状態に戻す
意味のある変更単位でコミットできる
200階 受付前: ハンズオン資料の配布
● Git英文マニュアルを読むための予備知識
○ http://tokkonopapa.github.
io/blog/2012/01/17/prior-knowledge-for-
git-manual/
● HUNTER×HUNTER(著:富樫義博)
参考
ご清聴ありがとうございます

More Related Content

PDF
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
PDF
例外設計における大罪
PPTX
Redisの特徴と活用方法について
PPTX
MLOpsはバズワード
PDF
外部キー制約に伴うロックの小話
PDF
JVMのGCアルゴリズムとチューニング
PPTX
ぼくとJenkinsおじさんの360日戦争
PDF
良い?悪い?コードコメントの書き方
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
例外設計における大罪
Redisの特徴と活用方法について
MLOpsはバズワード
外部キー制約に伴うロックの小話
JVMのGCアルゴリズムとチューニング
ぼくとJenkinsおじさんの360日戦争
良い?悪い?コードコメントの書き方

What's hot (20)

PDF
モジュールの凝集度・結合度・インタフェース
PPTX
振り返り(アジャイルレトロスペクティブズ)
PDF
Redmine にいろいろ埋め込んでみた
PDF
Go初心者がGoでコマンドラインツールの作成に挑戦した話
PDF
いつやるの?Git入門
PDF
Spring bootでweb 基本編
PDF
情報システム部門のタスク管理とIT全般統制 ~ Excel管理からの脱却 ~ (ITS Redmine #RxTstudy #5)
PDF
なぜ「マイクロサービス“化”」が必要なのか
PDF
マイクロサービス 4つの分割アプローチ
PDF
君はyarn.lockをコミットしているか?
PDF
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
PPTX
ASP.NET Core の ​ パフォーマンスを支える ​ I/O Pipeline と Channel
PPTX
Polyphony: Python ではじめる FPGA
PDF
ドキュメントシステムはこれを使え2015年版
PDF
Gitはじめの一歩
PDF
[AC05] マイクロサービスは分割がキモ!基幹システムのためのドメイン駆動設計
PDF
こわくない Git
PDF
とあるメーカーのRedmine活用事例
PDF
ドメイン駆動設計の正しい歩き方
PPTX
ブランチを綺麗に保ち、どうやって本番アップするのか
モジュールの凝集度・結合度・インタフェース
振り返り(アジャイルレトロスペクティブズ)
Redmine にいろいろ埋め込んでみた
Go初心者がGoでコマンドラインツールの作成に挑戦した話
いつやるの?Git入門
Spring bootでweb 基本編
情報システム部門のタスク管理とIT全般統制 ~ Excel管理からの脱却 ~ (ITS Redmine #RxTstudy #5)
なぜ「マイクロサービス“化”」が必要なのか
マイクロサービス 4つの分割アプローチ
君はyarn.lockをコミットしているか?
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ASP.NET Core の ​ パフォーマンスを支える ​ I/O Pipeline と Channel
Polyphony: Python ではじめる FPGA
ドキュメントシステムはこれを使え2015年版
Gitはじめの一歩
[AC05] マイクロサービスは分割がキモ!基幹システムのためのドメイン駆動設計
こわくない Git
とあるメーカーのRedmine活用事例
ドメイン駆動設計の正しい歩き方
ブランチを綺麗に保ち、どうやって本番アップするのか
Ad

Similar to DVCSとGitの基礎 (20)

PDF
Getting started with Windows Containers
PDF
Mercurial入門(前半)
PDF
Windows Server 2019 で Container を使ってみる
PDF
Version管理 1
PDF
VCS - Version Control System at Security and Programming camp 2011
PDF
CIデモ環境 構築手順書
PPTX
SC2012 VMM SP1 Update ヒーロー島 版
PDF
VMware vForum/VSS2013にて発表されたNetAppセッションコンテンツ
PDF
書籍を執筆して気づいた Windows Server 2012 R2 過去のサーバーOSとの違い
PPT
20060419
PPTX
Cld018 コンテナ go_~あなた
PDF
Cld018 コンテナ go_~あなた
PDF
Docker 17.06 Updates 最近何が変わったの?
PDF
超簡単!バージョン管理入門 最初の一歩
PDF
クラウド概略(プレゼン)
PDF
フロントエンド開発環境
PDF
『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab
PDF
Amazon EC2 Container Service Deep dive
PDF
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Getting started with Windows Containers
Mercurial入門(前半)
Windows Server 2019 で Container を使ってみる
Version管理 1
VCS - Version Control System at Security and Programming camp 2011
CIデモ環境 構築手順書
SC2012 VMM SP1 Update ヒーロー島 版
VMware vForum/VSS2013にて発表されたNetAppセッションコンテンツ
書籍を執筆して気づいた Windows Server 2012 R2 過去のサーバーOSとの違い
20060419
Cld018 コンテナ go_~あなた
Cld018 コンテナ go_~あなた
Docker 17.06 Updates 最近何が変わったの?
超簡単!バージョン管理入門 最初の一歩
クラウド概略(プレゼン)
フロントエンド開発環境
『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab
Amazon EC2 Container Service Deep dive
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Ad

More from sinsoku listy (20)

PDF
Rails6にいつ上げるか?
PDF
Rails Testing on Fargate
PDF
Search Form for Rails
PDF
ENGINEER WORK!!
PDF
自己修復的なインフラ -Self-Healing Infrastructure-
PDF
毎日gemをアップグレードする生活
PDF
Rails 5.2: credentials
PDF
Randomly Failing Specs
PDF
技術的負債とリファクタリング
PDF
Git 初心者講座 by forkwell
PDF
Swift on Docker
PDF
ES2015のカバレッジ計測
PDF
CSSのカバレッジツール
PDF
本当にあった怖い話 7つの幽霊 7つの成仏
PDF
Awsでwindowsゲームを動かす
PDF
Action pack variantsの話
PDF
LT_Gitのfast fowardと継続的デリバリー
PDF
バージョン管理とGit
PDF
Git天空闘技場_ハンズオン
ODP
20101001 5分でわかるtrac pluginの作り方_slideshare
Rails6にいつ上げるか?
Rails Testing on Fargate
Search Form for Rails
ENGINEER WORK!!
自己修復的なインフラ -Self-Healing Infrastructure-
毎日gemをアップグレードする生活
Rails 5.2: credentials
Randomly Failing Specs
技術的負債とリファクタリング
Git 初心者講座 by forkwell
Swift on Docker
ES2015のカバレッジ計測
CSSのカバレッジツール
本当にあった怖い話 7つの幽霊 7つの成仏
Awsでwindowsゲームを動かす
Action pack variantsの話
LT_Gitのfast fowardと継続的デリバリー
バージョン管理とGit
Git天空闘技場_ハンズオン
20101001 5分でわかるtrac pluginの作り方_slideshare

DVCSとGitの基礎