SlideShare a Scribd company logo
1 of 20
Download to read offline
(工事中) 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

What's hot

Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4ichikaway
 
ぼくの考えた最強のpipeline構成
ぼくの考えた最強のpipeline構成ぼくの考えた最強のpipeline構成
ぼくの考えた最強のpipeline構成Naoto Nishizono
 
Git pyfes201207-presen
Git pyfes201207-presenGit pyfes201207-presen
Git pyfes201207-presenKouhei Maeda
 
Redisととあるシステム
RedisととあるシステムRedisととあるシステム
RedisととあるシステムTakehiro Torigaki
 
新生Lagopus2017(仮称)
新生Lagopus2017(仮称)新生Lagopus2017(仮称)
新生Lagopus2017(仮称)Masaru Oki
 
Cocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurlCocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurlMasayuki Nii
 
Mercurialコマンドの紹介
Mercurialコマンドの紹介Mercurialコマンドの紹介
Mercurialコマンドの紹介Tsutomu Takeuchi
 
とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。Kouhei Maeda
 
R以外の研究ツール
R以外の研究ツールR以外の研究ツール
R以外の研究ツール弘毅 露崎
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成弘毅 露崎
 
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Nobuto Murata
 
Lagopus.confの書式(for lagopus 0.1.x)
Lagopus.confの書式(for lagopus 0.1.x)Lagopus.confの書式(for lagopus 0.1.x)
Lagopus.confの書式(for lagopus 0.1.x)Masaru Oki
 
Custom Package Building with Poudriere
Custom Package Building with PoudriereCustom Package Building with Poudriere
Custom Package Building with PoudriereYuichiro Naito
 

What's hot (19)

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

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

バージョン管理システムチュートリアル
バージョン管理システムチュートリアルバージョン管理システムチュートリアル
バージョン管理システムチュートリアルRyo Igarashi
 
猫にはわからないGit講座
猫にはわからないGit講座猫にはわからないGit講座
猫にはわからないGit講座Yusei Yamanaka
 
git 初めの一歩
git 初めの一歩git 初めの一歩
git 初めの一歩Shin Yoshida
 
Git -分散バージョン管理システム-
Git -分散バージョン管理システム-Git -分散バージョン管理システム-
Git -分散バージョン管理システム-Koji Shinba
 
Version Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルVersion Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルComputational Materials Science Initiative
 
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜Takashi Uemura
 
Next-L Enju 開発ワークショップ #02
Next-L Enju 開発ワークショップ #02Next-L Enju 開発ワークショップ #02
Next-L Enju 開発ワークショップ #02Kosuke Tanabe
 
GitHubワークショップ
GitHubワークショップGitHubワークショップ
GitHubワークショップHiroaki Murayama
 
Git 初心者講座 by forkwell
Git 初心者講座 by forkwellGit 初心者講座 by forkwell
Git 初心者講座 by forkwellsinsoku listy
 
VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 Hiro Yoshioka
 
社会人になってから考えた GitHubを使った共同論文執筆 フロー編
社会人になってから考えた GitHubを使った共同論文執筆 フロー編社会人になってから考えた GitHubを使った共同論文執筆 フロー編
社会人になってから考えた GitHubを使った共同論文執筆 フロー編yskw
 
ソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHubソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHubToru Tamaki
 
バージョン管理とGit
バージョン管理とGitバージョン管理とGit
バージョン管理とGitsinsoku listy
 

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

バージョン管理システムチュートリアル
バージョン管理システムチュートリアルバージョン管理システムチュートリアル
バージョン管理システムチュートリアル
 
Git (実践入門編)
Git (実践入門編)Git (実践入門編)
Git (実践入門編)
 
Git 実践入門
Git 実践入門Git 実践入門
Git 実践入門
 
猫にはわからないGit講座
猫にはわからないGit講座猫にはわからないGit講座
猫にはわからないGit講座
 
Git for beginners
Git for beginnersGit for beginners
Git for beginners
 
git 初めの一歩
git 初めの一歩git 初めの一歩
git 初めの一歩
 
Git -分散バージョン管理システム-
Git -分散バージョン管理システム-Git -分散バージョン管理システム-
Git -分散バージョン管理システム-
 
Version Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルVersion Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアル
 
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
 
Git
GitGit
Git
 
Next-L Enju 開発ワークショップ #02
Next-L Enju 開発ワークショップ #02Next-L Enju 開発ワークショップ #02
Next-L Enju 開発ワークショップ #02
 
GitHubワークショップ
GitHubワークショップGitHubワークショップ
GitHubワークショップ
 
Github入門2014
Github入門2014Github入門2014
Github入門2014
 
Git 初心者講座 by forkwell
Git 初心者講座 by forkwellGit 初心者講座 by forkwell
Git 初心者講座 by forkwell
 
Git/GitHub
Git/GitHubGit/GitHub
Git/GitHub
 
VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011
 
社会人になってから考えた GitHubを使った共同論文執筆 フロー編
社会人になってから考えた GitHubを使った共同論文執筆 フロー編社会人になってから考えた GitHubを使った共同論文執筆 フロー編
社会人になってから考えた GitHubを使った共同論文執筆 フロー編
 
Git&GitHub入門
Git&GitHub入門Git&GitHub入門
Git&GitHub入門
 
ソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHubソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHub
 
バージョン管理とGit
バージョン管理とGitバージョン管理とGit
バージョン管理とGit
 

More from Teloo

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

More from Teloo (6)

図とコード例で多分わかる React と flux (工事中)
図とコード例で多分わかる React と flux (工事中)図とコード例で多分わかる React と flux (工事中)
図とコード例で多分わかる React と flux (工事中)
 
Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)
 
図でわかるGit
図でわかるGit図でわかるGit
図でわかるGit
 
JS 6th edition reading circle part 3
JS 6th edition reading circle part 3JS 6th edition reading circle part 3
JS 6th edition reading circle part 3
 
JS 6th edition reading circle part 2
JS 6th edition reading circle part 2JS 6th edition reading circle part 2
JS 6th edition reading circle part 2
 
(工事中) Git の仕組み
(工事中) Git の仕組み(工事中) Git の仕組み
(工事中) 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 型を表す オブジェクト名