(工事中) git の仕組み

20
(工事中) Git の仕組み 開発部 齋藤 輝明

Upload: teloo

Post on 27-Jun-2015

185 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: (工事中) Git の仕組み

(工事中) Git の仕組み

開発部齋藤 輝明

Page 2: (工事中) Git の仕組み

入門Git1. gitとは

2. gitの基本概念

3. インストールと初期構成

4. 独りで使う

5. 2か所で使う

6. グループで使う

7. ブランチを使った開発

8. 分散環境とブランチとの関連

9. 変更履歴を追いかける

10. パッチ・べースのワークフロー

11. ゴミファイルの無視

12. 構成変数

13. リモート・リポジトリ定義

14. ファイル・アトリビュート

15. 歴史の2分探索

16. 間違いからの回復

17. フック・メカニズム

18. リポジトリの出版公開

19. gitの周辺

Page 3: (工事中) Git の仕組み

アジェンダ

1. Git って何?おいしいの?

2. Git はオブジェクトの集合体で管理するよ!

3. ブランチ / タグはただのポインタだよ!

4. コミットは 3 層を意識しよう!

5. merge! cherry-pick! rebase!

Page 4: (工事中) Git の仕組み

アジェンダ

1. Git って何?おいしいの?

2. Git はオブジェクトの集合体で管理するよ!

3. ブランチ / タグはただのポインタだよ!

4. コミットは 3 層を意識しよう!

5. merge! cherry-pick! rebase!

コマンドの使い方とかを教えてほしい?

本を読むか、Google 先生に訊いてください。

Page 5: (工事中) Git の仕組み

アジェンダ

1. Git って何?おいしいの?

2. Git はオブジェクトの集合体で管理するよ!

3. ブランチ / タグはただのポインタだよ!

4. コミットは 3 層を意識しよう!

5. merge! cherry-pick! rebase!

Page 6: (工事中) Git の仕組み

Git とは?

● オープンソースで開発されているバージョン管理システム

● Linus Torvalds が Linux カーネルのソース管理のために開発を始めたツール

● 種類はバージョン管理システムの分散型に含まれる

Page 7: (工事中) Git の仕組み

集中型 (CVS, Subversion)

リポジトリ

ファイル・ディレクトリ群 ファイル・ディレクトリ群 ファイル・ディレクトリ群

com

mit

com

mit com

mit

upda

te

update

update

Page 8: (工事中) Git の仕組み

ローカルリポジトリ

分散型 (Git)

共用リポジトリ

ファイル・ディレクトリ群 ファイル・ディレクトリ群 ファイル・ディレクトリ群

com

mit

com

mit

ローカルリポジトリ ローカルリポジトリ

push

push

push

fetch

fetchfetch

com

mit

Page 9: (工事中) Git の仕組み

Subversion の作業例

> svn update> > emacs test1.js> svn commit> > emacs test2.js> git commit

# リポジトリの修正をローカルのファイル・ディレクトリ群に反映

# test1.js をエディタで修正

# test1.js をリポジトリに反映

# test2.js をエディタで修正

# test2.js をリポジトリに反映

Page 10: (工事中) Git の仕組み

Git の作業例

> git fetch> git merge origin/master> > emacs test1.js> git add test1.js> git commit> > emacs test2.js> git add test2.js> git commit> > git push

# 共用リポジトリから修正差分を取得

# ローカルリポジトリにマージ

# test1.js をエディタで修正

# test1.js をコミット対象に指定

# コミット対象のものをローカルリポジトリににコミット

# test2.js をエディタで修正

# test2.js をコミット対象に指定

# コミット対象のものをローカルリポジトリににコミット

# ローカルリポジトリの修正内容を共用リポジトリに反映

Page 11: (工事中) Git の仕組み

Git の作業例 (簡略化)

> git pull> > emacs test1.js> git commit -a> > emacs test2.js> git commit -a> > git push

# 共用リポジトリから修正差分を取得して、ローカルリポジトリにマージ

# test1.js をエディタで修正

# 修正されたファイル群をローカルリポジトリにコミット

# test2.js をエディタで修正

# 修正されたファイル群をローカルリポジトリににコミット

# ローカルリポジトリの修正内容を共用リポジトリに反映

Page 12: (工事中) Git の仕組み

分散型の特長

● ネットワークから分離されている環境でも、ローカルのリポジトリ中で仕事が続けられる

● 他人に悪影響を及ぼすことを恐れずに、大規模な実験的な変更を自由に行ない、その途中経過を記録しておくことができる

● まとまった変更がいったん完成した時点で、履歴を見なおして、適切な形に書き直してから公開することができる

Page 13: (工事中) Git の仕組み

アジェンダ

1. Git って何?おいしいの?

2. Git はオブジェクトの集合体で管理するよ!

3. ブランチ / タグはただのポインタだよ!

4. コミットは 3 層を意識しよう!

5. merge! cherry-pick! rebase!

Page 14: (工事中) Git の仕組み

Git はオブジェクト

● Git は「オブジェクト」と呼ばれるデータの集合体

● オブジェクトの内容を基に生成されたハッシュをキーとした Key Value Storeで管理されている

● .git/objects 下に格納されている

Page 15: (工事中) Git の仕組み

主なオブジェクトの種類

● blob○ ファイルの中身を表す

● tree○ ディレクトリの中身を表す

● commit○ 修正差分を表す

Page 16: (工事中) Git の仕組み

オブジェクトの構造

オブジェクト名

ヘッダ情報(型と長さ)

オブジェクトの内容(型により異なる)

SHA-1ハッシュ

Page 17: (工事中) Git の仕組み

blob オブジェクトの例

bbc4538...

blob 538

#include <studio.h>

int main(void) { printf("Hello World!");}

Page 18: (工事中) Git の仕組み

tree オブジェクトの例

b1242d7...

tree 224

100644 bbc4538... README040000 428b354... lib100755 bfef14a5... start.js

Page 19: (工事中) Git の仕組み

tree オブジェクトの例

b1242d7...

tree 224

100644 bbc4538... README040000 428b354... lib100755 bfef14a5... start.js型を表す オブジェクト名