SlideShare a Scribd company logo
(工事中) Git の仕組み
     開発部
    齋藤 輝明
入門Git
 1.   gitとは
 2.   gitの基本概念
 3.   インストールと初期構成
 4.   独りで使う
 5.   2か所で使う
 6.   グループで使う
 7.   ブランチを使った開発
 8.   分散環境とブランチとの関連
 9.   変更履歴を追いかける
10.   パッチ・べースのワークフロー
11.   ゴミファイルの無視
12.   構成変数
13.   リモート・リポジトリ定義
14.   ファイル・アトリビュート
15.   歴史の2分探索
16.   間違いからの回復
17.   フック・メカニズム
18.   リポジトリの出版公開
19.   gitの周辺
アジェンダ

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

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

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

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

5. merge! cherry-pick! rebase!
アジェンダ

1. Git って何?おいしいの?
コマンドの使い方とかを
2. Git はオブジェクトの集合体で管理するよ!
教えてほしい?
3. ブランチ / タグはただのポインタだよ!
本を読むか、Google 先生に
4. コミットは 3 層を意識しよう!
訊いてください。
5. merge! cherry-pick! rebase!
アジェンダ

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

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

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

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

5. merge! cherry-pick! rebase!
Git とは?

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

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

●   種類はバージョン管理システムの分散型に含ま
    れる
集中型 (CVS, Subversion)

                               リポジトリ




                                                       up
                                   update




                                                       da
             it
         mm




                                                        te
                          commit




                                            co
        co




                   te




                                               m
                  da




                                              mi
                                                   t
                  up




 ファイル・ディレクトリ群           ファイル・ディレクトリ群                   ファイル・ディレクトリ群
分散型 (Git)

                              共用リポジトリ                 fe
                                                        tch
               h
          p us
                                               pu




                                       fetch
                      ch                         sh




                             push
                   fet




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




                                                           commit
 commit




ファイル・ディレクトリ群               ファイル・ディレクトリ群               ファイル・ディレクトリ群
Subversion の作業例
> svn update       # リポジトリの修正をローカルのファイル・ディレクトリ群に
>                  反映
> emacs test1.js   # test1.js をエディタで修正
> svn commit       # test1.js をリポジトリに反映
>
> emacs test2.js   # test2.js をエディタで修正
> git commit       # test2.js をリポジトリに反映
Git の作業例
> git fetch                 # 共用リポジトリから修正差分を取得
> git merge origin/master   # ローカルリポジトリにマージ
>
> emacs test1.js            # test1.js をエディタで修正
> git add test1.js          # test1.js をコミット対象に指定
> git commit                # コミット対象のものをローカルリポジトリににコミット
>
> emacs test2.js            # test2.js をエディタで修正
> git add test2.js          # test2.js をコミット対象に指定
> git commit                # コミット対象のものをローカルリポジトリににコミット
>
> git push                  # ローカルリポジトリの修正内容を共用リポジトリに反
                            映
Git の作業例 (簡略化)
> git pull         # 共用リポジトリから修正差分を取得して、ローカルリ
>                  ポジトリにマージ
> emacs test1.js   # test1.js をエディタで修正
> git commit -a    # 修正されたファイル群をローカルリポジトリにコミット
>
> emacs test2.js   # test2.js をエディタで修正
> git commit -a    # 修正されたファイル群をローカルリポジトリににコミッ
                   ト
>
                   # ローカルリポジトリの修正内容を共用リポジトリに反
> git push         映
分散型の特長

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

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

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

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

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

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

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

5. merge! cherry-pick! rebase!
Git はオブジェクト

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

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

●   .git/objects 下に格納されている
主なオブジェクトの種類

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


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


●   commit
    ○   修正差分を表す
オブジェクトの構造

        オブジェクト名




                  ヘッダ情報(型と長さ)

SHA-1
ハッシュ



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

bbc4538...




                             blob 538

    #include <studio.h>

    int main(void) {
       printf("Hello World!");
    }
tree オブジェクトの例

b1242d7...




                         tree 224

    100644 bbc4538...    README
    040000 428b354...    lib
    100755 bfef14a5...   start.js
tree オブジェクトの例

b1242d7...




                         tree 224

    100644 bbc4538...    README
    040000 428b354...    lib
    100755 bfef14a5...   start.js
      型を表す   オブジェクト名
ディレクトリ・ファイルの表現例




出典:
http://www.progit.org/book/ja/Git%E3%81%AE%E5%86%85%E5%81%B4-Git%E3%82%AA%E3%83%
96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88

More Related Content

PPTX
How to make gem
PDF
PythonでRakeもどきを作ってみた
PPT
関西オープンソース 2008 30days Albumの裏側
PPT
YAPC Asia 2010 30days Albumの裏側 後日談
PDF
Git-dojo In Sendagaya.rb
PDF
Boost Tour 1.53.0 merge
PDF
Boost Tour 1.53.0
How to make gem
PythonでRakeもどきを作ってみた
関西オープンソース 2008 30days Albumの裏側
YAPC Asia 2010 30days Albumの裏側 後日談
Git-dojo In Sendagaya.rb
Boost Tour 1.53.0 merge
Boost Tour 1.53.0

What's hot (19)

PPT
Cakephp勉強会@tokyo #4
PPTX
ぼくの考えた最強のpipeline構成
ODP
チートシート
PDF
Git pyfes201207-presen
PDF
Redisととあるシステム
PPTX
Redis速習会@Wantedly
PDF
新生Lagopus2017(仮称)
PDF
Cocoa勉強会#33-意外に楽に使えるlibcurl
ODP
Mercurialコマンドの紹介
PDF
STC_manual_ver1.0
PDF
PDF
とあるWeb企業でのDebianシステムの使い方。
PDF
R以外の研究ツール
PDF
RとSQLiteで気軽にデータベース作成
PDF
Git overview (v 0.96)
PDF
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
PDF
Lagopus.confの書式(for lagopus 0.1.x)
PDF
20131109 ruby conf2013
ODP
Custom Package Building with Poudriere
Cakephp勉強会@tokyo #4
ぼくの考えた最強のpipeline構成
チートシート
Git pyfes201207-presen
Redisととあるシステム
Redis速習会@Wantedly
新生Lagopus2017(仮称)
Cocoa勉強会#33-意外に楽に使えるlibcurl
Mercurialコマンドの紹介
STC_manual_ver1.0
とあるWeb企業でのDebianシステムの使い方。
R以外の研究ツール
RとSQLiteで気軽にデータベース作成
Git overview (v 0.96)
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Lagopus.confの書式(for lagopus 0.1.x)
20131109 ruby conf2013
Custom Package Building with Poudriere
Ad

Similar to (工事中) Git の仕組み (20)

ODP
底辺webプログラマが今更git語ってみた
PDF
Gitを使ってみよう
PDF
ソフトウェア工学2023 07 バージョン管理
PDF
Git for beginners
PDF
Git&GitHubで共同作業〜入門編
PDF
Gitのすすめ
KEY
Git (実践入門編)
PDF
デザイナのためのGit入門
PDF
Git入門-概念編
PPT
Git(japanese)
PPTX
Git勉強会
KEY
開発環境
KEY
一人でもはじめるGitでバージョン管理
PDF
15分でわかるGit入門
PPTX
Ossで作成するチーム開発環境
PDF
VCS - Version Control System at Security and Programming camp 2011
PDF
バージョン管理システム入門
PPTX
2018 07-18 git-hub講座
PDF
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
PPTX
GitHubワークショップ
底辺webプログラマが今更git語ってみた
Gitを使ってみよう
ソフトウェア工学2023 07 バージョン管理
Git for beginners
Git&GitHubで共同作業〜入門編
Gitのすすめ
Git (実践入門編)
デザイナのためのGit入門
Git入門-概念編
Git(japanese)
Git勉強会
開発環境
一人でもはじめるGitでバージョン管理
15分でわかるGit入門
Ossで作成するチーム開発環境
VCS - Version Control System at Security and Programming camp 2011
バージョン管理システム入門
2018 07-18 git-hub講座
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
GitHubワークショップ
Ad

More from Teloo (6)

PDF
図とコード例で多分わかる React と flux (工事中)
PDF
Gitを理解するためにおさえておきたい3つの図(工事中)
PDF
図でわかるGit
PDF
JS 6th edition reading circle part 3
PDF
JS 6th edition reading circle part 2
PDF
(工事中) Git の仕組み
図とコード例で多分わかる React と flux (工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)
図でわかるGit
JS 6th edition reading circle part 3
JS 6th edition reading circle part 2
(工事中) Git の仕組み

(工事中) Git の仕組み

  • 1. (工事中) Git の仕組み 開発部 齋藤 輝明
  • 2. 入門Git 1. gitとは 2. gitの基本概念 3. インストールと初期構成 4. 独りで使う 5. 2か所で使う 6. グループで使う 7. ブランチを使った開発 8. 分散環境とブランチとの関連 9. 変更履歴を追いかける 10. パッチ・べースのワークフロー 11. ゴミファイルの無視 12. 構成変数 13. リモート・リポジトリ定義 14. ファイル・アトリビュート 15. 歴史の2分探索 16. 間違いからの回復 17. フック・メカニズム 18. リポジトリの出版公開 19. gitの周辺
  • 3. アジェンダ 1. Git って何?おいしいの? 2. Git はオブジェクトの集合体で管理するよ! 3. ブランチ / タグはただのポインタだよ! 4. コミットは 3 層を意識しよう! 5. merge! cherry-pick! rebase!
  • 4. アジェンダ 1. Git って何?おいしいの? コマンドの使い方とかを 2. Git はオブジェクトの集合体で管理するよ! 教えてほしい? 3. ブランチ / タグはただのポインタだよ! 本を読むか、Google 先生に 4. コミットは 3 層を意識しよう! 訊いてください。 5. merge! cherry-pick! rebase!
  • 5. アジェンダ 1. Git って何?おいしいの? 2. Git はオブジェクトの集合体で管理するよ! 3. ブランチ / タグはただのポインタだよ! 4. コミットは 3 層を意識しよう! 5. merge! cherry-pick! rebase!
  • 6. Git とは? ● オープンソースで開発されているバージョン管 理システム ● Linus Torvalds が Linux カーネルのソース管 理のために開発を始めたツール ● 種類はバージョン管理システムの分散型に含ま れる
  • 7. 集中型 (CVS, Subversion) リポジトリ up update da it mm te commit co co te m da mi t up ファイル・ディレクトリ群 ファイル・ディレクトリ群 ファイル・ディレクトリ群
  • 8. 分散型 (Git) 共用リポジトリ fe tch h p us pu fetch ch sh push fet ローカルリポジトリ ローカルリポジトリ ローカルリポジトリ commit commit commit ファイル・ディレクトリ群 ファイル・ディレクトリ群 ファイル・ディレクトリ群
  • 9. Subversion の作業例 > svn update # リポジトリの修正をローカルのファイル・ディレクトリ群に > 反映 > emacs test1.js # test1.js をエディタで修正 > svn commit # test1.js をリポジトリに反映 > > emacs test2.js # test2.js をエディタで修正 > git commit # test2.js をリポジトリに反映
  • 10. Git の作業例 > git fetch # 共用リポジトリから修正差分を取得 > git merge origin/master # ローカルリポジトリにマージ > > emacs test1.js # test1.js をエディタで修正 > git add test1.js # test1.js をコミット対象に指定 > git commit # コミット対象のものをローカルリポジトリににコミット > > emacs test2.js # test2.js をエディタで修正 > git add test2.js # test2.js をコミット対象に指定 > git commit # コミット対象のものをローカルリポジトリににコミット > > git push # ローカルリポジトリの修正内容を共用リポジトリに反 映
  • 11. Git の作業例 (簡略化) > git pull # 共用リポジトリから修正差分を取得して、ローカルリ > ポジトリにマージ > emacs test1.js # test1.js をエディタで修正 > git commit -a # 修正されたファイル群をローカルリポジトリにコミット > > emacs test2.js # test2.js をエディタで修正 > git commit -a # 修正されたファイル群をローカルリポジトリににコミッ ト > # ローカルリポジトリの修正内容を共用リポジトリに反 > git push 映
  • 12. 分散型の特長 ● ネットワークから分離されている環境でも、ロー カルのリポジトリ中で仕事が続けられる ● 他人に悪影響を及ぼすことを恐れずに、大規模 な実験的な変更を自由に行ない、その途中経 過を記録しておくことができる ● まとまった変更がいったん完成した時点で、履 歴を見なおして、適切な形に書き直してから公 開することができる
  • 13. アジェンダ 1. Git って何?おいしいの? 2. Git はオブジェクトの集合体で管理するよ! 3. ブランチ / タグはただのポインタだよ! 4. コミットは 3 層を意識しよう! 5. merge! cherry-pick! rebase!
  • 14. Git はオブジェクト ● Git は「オブジェクト」と呼ばれるデータの集合体 ● オブジェクトの内容を基に生成されたハッシュを キーとした Key Value Storeで管理されている ● .git/objects 下に格納されている
  • 15. 主なオブジェクトの種類 ● blob ○ ファイルの中身を表す ● tree ○ ディレクトリの中身を表す ● commit ○ 修正差分を表す
  • 16. オブジェクトの構造 オブジェクト名 ヘッダ情報(型と長さ) SHA-1 ハッシュ オブジェクトの内容 (型により異なる)
  • 17. blob オブジェクトの例 bbc4538... blob 538 #include <studio.h> int main(void) { printf("Hello World!"); }
  • 18. tree オブジェクトの例 b1242d7... tree 224 100644 bbc4538... README 040000 428b354... lib 100755 bfef14a5... start.js
  • 19. tree オブジェクトの例 b1242d7... tree 224 100644 bbc4538... README 040000 428b354... lib 100755 bfef14a5... start.js 型を表す オブジェクト名