SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
セキュリティ&プログラミングキャンプ
                 2008
             「gitの使い方」


                                                   ミラクル・リナックス株式会社
                                                         よしおかひろたか




Copyright 2008 Hiro Yoshioka All rights reserved
                                                         1
Contents
• はじめに
• git入門
 – 分散バージョン管理システム
 – CVS/Subversionとの比較
• gitユーザのワークフロー
• git管理者のワークフロー
• 様々な話題
はじめに

    git
    
        ギットと読む
    
        LinusがLinuxのカーネル開発のために開発
    
        浜野さんがメンテしている
    
        背景
          
              2002年BitKeeper(パッチ単位の管理)
              CVSはファイル単位の管理なのでカーネル開発に適し
              ていない。
          
              2005年4月BitKeeperとの決別
gitの特徴

    ブランチが高速で簡単

    オフライン作業ができ、ローカル・コミットを実
    行できる

    コミットはファイル単位ではなくアトミックに行え
    る

    完全なプロジェクト履歴を持つリポジトリが含
    まれる

    対等なリポジトリ
git入門

    分散バージョン管理システム

    CVS/Subversionとの比較
分散バージョン管理システム



         push/pull

 レポジトリ               レポジトリ


すべてのレポジトリは対等
分散バージョン管理システム

    リモートにあるリポジトリを元にしてローカルに
    自分用リポジトリを作成(clone)

    ローカルに自由に変更(commit)

    ローカルの変更をリモートに反映(push)

    リモートの変更をローカルに反映(pull)

    それぞれのレポジトリはどちらが親、子という
    関係ではなく対等
CVS/Subversionとの比較

    CVS/Subversionは集中バージョン管理システ
    ム
    
        リポジトリは一ヶ所
    
        書き込み権限は一部のユーザー
    
        ワークフローがコミッターと開発者で違う
gitユーザのワークフロー

    リモートリポジトリのコピー(clone)
    
        $ git clone
        git://git.kernel.org/pub/scm/linux/kernel/git/torv
        alds/linux-2.6.git

    ファイルの編集、テスト、…

    ファイルの追加
    
        $ git add new-file

    コミット(ローカルレポジトリ)
    
        $ git commit -a
        コメントの記述など
gitユーザのワークフロー

    リモートレポジトリのマージ
    
        $ git pull
        変更点などを取り込む

    リモートレポジトリへのコミット
    
        $ git push
gitのユースケース

    書き込み権限がない場合。
    
        自分のローカルレポジトリを公開してメンテナ(コミ
        ッター)にpullしてもらう。
    
        メール等でパッチを送る。(よくあるケース)

    書き込み権限がある場合。
    
        自分でpushする。
        
            大きな変更でも履歴が残っているので問題を追跡しや
            すい。
git管理者のワークフロー

    リポジトリの作成
    
        $ git init (リポジトリの初期化)
    
        $ git add (ファイルの追加)

    gitツリーの公開
    
        ssh
    
        http
    
        git
    
        rsync
ブランチ

    HEAD:ブランチ上の最新のコミット

    HEAD^:HEADの親

    HEAD^^:HEADの親の親
リグレッションを見つける

    git bisect
     ---v1---v2---...---v1000
    $git bisect start
    $git bisect good v1(OKだったバージョン)
    $git bisect bad v1000(NGのバージョン)
    $git branch
    一時的に'bisect'ブランチへ移動。テストして
    OKかNGかを確認する
    $ git bisect bad (NGの場合)
    $ git bisect good (OKの場合)
    上記を繰り返す。gitが問題を発生させたコミッ
    トを指摘してくれる。
高度なブランチ管理

    ---Z---o---X---...---o---A---C---D
       \                         /
         o---o---Y---...---o---B
    Xで関数Fooの意味を変えた
    Yで関数Foo(古い動作)を利用するようにした
    Aの時点、Bの時点、どちらも矛盾はない
    CでコンフリクトがなかったするがCの時点で意
    味的なバグがある。Yの関数Fooの呼び出しは
    間違っている。
    git-bisect(1)はCが問題と指摘する
高度なブランチ管理

    ---Z---o---X---...---o---A---o---
    Y*---...---B*---D*
    ZからBの履歴をAの先頭にrebaseした場合、1
    行の履歴を得られる。
    ZとD*の間をgit-bisectするとY*が問題だと指
    摘できる。
gitの内部構造

    オブジェクト
    
        blob:ファイルの中身
    
        tree:ディレクトリ構造
    
        commit:コミット
    
        tag:タグ
    
        オブジェクトはすべてzlibで圧縮されSHA1ハッシュ
        を持つ。
    
        ハッシュ値:40桁16進
gitをgitを利用して理解する

    Read the git source code using by git!

    ソースコードのコピー
     $ time git clone git://git.kernel.org/pub/scm/git/git.git;date
     Initialized empty Git repository in /proj/git/.git/
     remote: Counting objects: 72046, done.
     remote: Compressing objects: 100% (21922/21922), done.
     remote: Total 72046 (delta 51731), reused 68367 (delta 48756)
     Receiving objects: 100% (72046/72046), 15.46 MiB | 803 KiB/s, done.
     Resolving deltas: 100% (51731/51731), done.

     real 0m59.271s
     user 0m30.590s
     sys 0m1.224s
     2008年 5月 16日 金曜日 09:00:07 JST
gitをgitを利用して理解する

    最初のコミットにアクセス
    $ git checkout e83c5163
     $ git checkout e83c5163
     Note: moving to "e83c5163" which isn't a local branch
     If you want to create a new branch from this checkout, you may do so
     (now or later) by using -b with the checkout command again. Example:
       git checkout -b <new_branch_name>
     HEAD is now at e83c516... Initial revision of "git", the information manager from hell
     hyoshiok@hyoshiok-laptop:/proj/git$ ls
     Makefile cache.h commit-tree.c read-cache.c show-diff.c              write-tree.c
     README cat-file.c init-db.c         read-tree.c update-cache.c
     hyoshiok@hyoshiok-laptop:/proj/git$ wc *
        40 99 957 Makefile
       168 1415 8392 README
        93 350 2484 cache.h
        23 66 503 cat-file.c
       172 576 4103 commit-tree.c
        51 186 1198 init-db.c
       259 820 5681 read-cache.c
        43 133 986 read-tree.c
        81 245 2034 show-diff.c
       248 767 5395 update-cache.c
        66 223 1441 write-tree.c
      1244 4880 33174 合計
gitをgitを利用して理解する

    最初のコミットは1000行程度のプログラムであ
    った。

    READMEを読む

    Makefileを読む

    makeしてみる(libssl-debパッケージをインスト
    ールしておく)
様々な話題

    gitk (git GUI)
    
        tcl, tk(wish) で実装

    github
    
        git向けのホスティングサービス
gitを利用する主なOSSプロジェクト

    Linux

    git

    X

    samba

Weitere ähnliche Inhalte

Andere mochten auch

TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02
Hiro Yoshioka
 
public serviceenterprise group ML Pres
public serviceenterprise group ML Prespublic serviceenterprise group ML Pres
public serviceenterprise group ML Pres
finance20
 
Marriott International Reports Third Quarter Results
Marriott International Reports Third Quarter ResultsMarriott International Reports Third Quarter Results
Marriott International Reports Third Quarter Results
finance20
 
00 TeléFonos Actualizado
00 TeléFonos Actualizado00 TeléFonos Actualizado
00 TeléFonos Actualizado
Adalberto
 
sun trust banks 3Q 2002 10-Q
sun trust banks 	3Q 2002 10-Qsun trust banks 	3Q 2002 10-Q
sun trust banks 3Q 2002 10-Q
finance20
 
MBA - Executive Interaction XVII - OSU
MBA - Executive Interaction XVII - OSUMBA - Executive Interaction XVII - OSU
MBA - Executive Interaction XVII - OSU
Hasib Rahman, MBA
 
aetna Download Documentation 2005 Notice of Annual Meeting and Proxy Statement
aetna Download Documentation	2005 Notice of Annual Meeting and Proxy Statementaetna Download Documentation	2005 Notice of Annual Meeting and Proxy Statement
aetna Download Documentation 2005 Notice of Annual Meeting and Proxy Statement
finance9
 

Andere mochten auch (17)

kernel code reading party on March 28th, 2014
kernel code reading party on March 28th, 2014kernel code reading party on March 28th, 2014
kernel code reading party on March 28th, 2014
 
Project Based Learning using by PaaS
Project Based Learning using by PaaSProject Based Learning using by PaaS
Project Based Learning using by PaaS
 
Go to Study Group BoF at Security and Programming camp 2011
Go to Study Group BoF at Security and Programming camp 2011 Go to Study Group BoF at Security and Programming camp 2011
Go to Study Group BoF at Security and Programming camp 2011
 
Building Hacker Centric Culture in Japan
Building Hacker Centric Culture in JapanBuilding Hacker Centric Culture in Japan
Building Hacker Centric Culture in Japan
 
TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02
 
Tokaido 53 walk
Tokaido 53 walkTokaido 53 walk
Tokaido 53 walk
 
社内Twitter研究会、by 勉強会同好会 110426
社内Twitter研究会、by 勉強会同好会 110426社内Twitter研究会、by 勉強会同好会 110426
社内Twitter研究会、by 勉強会同好会 110426
 
カーネル読書会の作り方 1000 speakers conference, 2/23/'08
カーネル読書会の作り方 1000 speakers conference, 2/23/'08カーネル読書会の作り方 1000 speakers conference, 2/23/'08
カーネル読書会の作り方 1000 speakers conference, 2/23/'08
 
100th Kernel code reading party
100th Kernel code reading party100th Kernel code reading party
100th Kernel code reading party
 
第100回カーネル読書会の作り方
第100回カーネル読書会の作り方第100回カーネル読書会の作り方
第100回カーネル読書会の作り方
 
public serviceenterprise group ML Pres
public serviceenterprise group ML Prespublic serviceenterprise group ML Pres
public serviceenterprise group ML Pres
 
Marriott International Reports Third Quarter Results
Marriott International Reports Third Quarter ResultsMarriott International Reports Third Quarter Results
Marriott International Reports Third Quarter Results
 
00 TeléFonos Actualizado
00 TeléFonos Actualizado00 TeléFonos Actualizado
00 TeléFonos Actualizado
 
sun trust banks 3Q 2002 10-Q
sun trust banks 	3Q 2002 10-Qsun trust banks 	3Q 2002 10-Q
sun trust banks 3Q 2002 10-Q
 
MBA - Executive Interaction XVII - OSU
MBA - Executive Interaction XVII - OSUMBA - Executive Interaction XVII - OSU
MBA - Executive Interaction XVII - OSU
 
aetna Download Documentation 2005 Notice of Annual Meeting and Proxy Statement
aetna Download Documentation	2005 Notice of Annual Meeting and Proxy Statementaetna Download Documentation	2005 Notice of Annual Meeting and Proxy Statement
aetna Download Documentation 2005 Notice of Annual Meeting and Proxy Statement
 
Bogać Się Kiedy Śpisz Ben Sweetland
Bogać Się Kiedy Śpisz Ben SweetlandBogać Się Kiedy Śpisz Ben Sweetland
Bogać Się Kiedy Śpisz Ben Sweetland
 

Ähnlich wie programming camp 2008, introduction of git (7)

Qt编程介绍
Qt编程介绍Qt编程介绍
Qt编程介绍
 
20100925 sola-android
20100925 sola-android20100925 sola-android
20100925 sola-android
 
Clase5_Python-CTIC
Clase5_Python-CTICClase5_Python-CTIC
Clase5_Python-CTIC
 
Pyconfr 2010-itws
Pyconfr 2010-itwsPyconfr 2010-itws
Pyconfr 2010-itws
 
张宴NGINX
张宴NGINX张宴NGINX
张宴NGINX
 
FISL11 2010 - Automação de Datacenters
FISL11 2010 - Automação de DatacentersFISL11 2010 - Automação de Datacenters
FISL11 2010 - Automação de Datacenters
 
DevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSDevInRio 2010 - NodeJS
DevInRio 2010 - NodeJS
 

Mehr von Hiro Yoshioka

エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
Hiro Yoshioka
 

Mehr von Hiro Yoshioka (20)

Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
 
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
 
不揮発性メモリ(NVM)とはなにか
不揮発性メモリ(NVM)とはなにか不揮発性メモリ(NVM)とはなにか
不揮発性メモリ(NVM)とはなにか
 
続・人生100年時代の学び方
続・人生100年時代の学び方続・人生100年時代の学び方
続・人生100年時代の学び方
 
人生100年時代における学び方 定年後の学生生活
人生100年時代における学び方 定年後の学生生活人生100年時代における学び方 定年後の学生生活
人生100年時代における学び方 定年後の学生生活
 
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
 
人生100年時代の学び方、脳には可塑性がある
人生100年時代の学び方、脳には可塑性がある人生100年時代の学び方、脳には可塑性がある
人生100年時代の学び方、脳には可塑性がある
 
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
 
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
 
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
 
未経験プログラマがコボルコンパイラを作った話 #compiler_study
未経験プログラマがコボルコンパイラを作った話 #compiler_study未経験プログラマがコボルコンパイラを作った話 #compiler_study
未経験プログラマがコボルコンパイラを作った話 #compiler_study
 
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
 
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
 
理科系の作文技術
理科系の作文技術理科系の作文技術
理科系の作文技術
 
Agile Software Development advanced course (PBL) at AIIT, 2015
Agile Software Development advanced course (PBL) at AIIT, 2015Agile Software Development advanced course (PBL) at AIIT, 2015
Agile Software Development advanced course (PBL) at AIIT, 2015
 
質問される力 #TechGirls
質問される力 #TechGirls質問される力 #TechGirls
質問される力 #TechGirls
 
Oracle vs Google API 著作権裁判を考える
Oracle vs Google API 著作権裁判を考えるOracle vs Google API 著作権裁判を考える
Oracle vs Google API 著作権裁判を考える
 
Using oss at an internet company and hacker culture
Using oss at an internet company and hacker cultureUsing oss at an internet company and hacker culture
Using oss at an internet company and hacker culture
 
Be Hacker
Be HackerBe Hacker
Be Hacker
 
IT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan
IT勉強会 Anatomy of IT Study groups, seminars, conferences in JapanIT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan
IT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan
 

programming camp 2008, introduction of git

  • 1. セキュリティ&プログラミングキャンプ 2008 「gitの使い方」 ミラクル・リナックス株式会社 よしおかひろたか Copyright 2008 Hiro Yoshioka All rights reserved 1
  • 2. Contents • はじめに • git入門 – 分散バージョン管理システム – CVS/Subversionとの比較 • gitユーザのワークフロー • git管理者のワークフロー • 様々な話題
  • 3. はじめに  git  ギットと読む  LinusがLinuxのカーネル開発のために開発  浜野さんがメンテしている  背景  2002年BitKeeper(パッチ単位の管理) CVSはファイル単位の管理なのでカーネル開発に適し ていない。  2005年4月BitKeeperとの決別
  • 4. gitの特徴  ブランチが高速で簡単  オフライン作業ができ、ローカル・コミットを実 行できる  コミットはファイル単位ではなくアトミックに行え る  完全なプロジェクト履歴を持つリポジトリが含 まれる  対等なリポジトリ
  • 5. git入門  分散バージョン管理システム  CVS/Subversionとの比較
  • 6. 分散バージョン管理システム push/pull レポジトリ レポジトリ すべてのレポジトリは対等
  • 7. 分散バージョン管理システム  リモートにあるリポジトリを元にしてローカルに 自分用リポジトリを作成(clone)  ローカルに自由に変更(commit)  ローカルの変更をリモートに反映(push)  リモートの変更をローカルに反映(pull)  それぞれのレポジトリはどちらが親、子という 関係ではなく対等
  • 8. CVS/Subversionとの比較  CVS/Subversionは集中バージョン管理システ ム  リポジトリは一ヶ所  書き込み権限は一部のユーザー  ワークフローがコミッターと開発者で違う
  • 9. gitユーザのワークフロー  リモートリポジトリのコピー(clone)  $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torv alds/linux-2.6.git  ファイルの編集、テスト、…  ファイルの追加  $ git add new-file  コミット(ローカルレポジトリ)  $ git commit -a コメントの記述など
  • 10. gitユーザのワークフロー  リモートレポジトリのマージ  $ git pull 変更点などを取り込む  リモートレポジトリへのコミット  $ git push
  • 11. gitのユースケース  書き込み権限がない場合。  自分のローカルレポジトリを公開してメンテナ(コミ ッター)にpullしてもらう。  メール等でパッチを送る。(よくあるケース)  書き込み権限がある場合。  自分でpushする。  大きな変更でも履歴が残っているので問題を追跡しや すい。
  • 12. git管理者のワークフロー  リポジトリの作成  $ git init (リポジトリの初期化)  $ git add (ファイルの追加)  gitツリーの公開  ssh  http  git  rsync
  • 13. ブランチ  HEAD:ブランチ上の最新のコミット  HEAD^:HEADの親  HEAD^^:HEADの親の親
  • 14. リグレッションを見つける  git bisect ---v1---v2---...---v1000 $git bisect start $git bisect good v1(OKだったバージョン) $git bisect bad v1000(NGのバージョン) $git branch 一時的に'bisect'ブランチへ移動。テストして OKかNGかを確認する $ git bisect bad (NGの場合) $ git bisect good (OKの場合) 上記を繰り返す。gitが問題を発生させたコミッ トを指摘してくれる。
  • 15. 高度なブランチ管理  ---Z---o---X---...---o---A---C---D \ / o---o---Y---...---o---B Xで関数Fooの意味を変えた Yで関数Foo(古い動作)を利用するようにした Aの時点、Bの時点、どちらも矛盾はない CでコンフリクトがなかったするがCの時点で意 味的なバグがある。Yの関数Fooの呼び出しは 間違っている。 git-bisect(1)はCが問題と指摘する
  • 16. 高度なブランチ管理  ---Z---o---X---...---o---A---o--- Y*---...---B*---D* ZからBの履歴をAの先頭にrebaseした場合、1 行の履歴を得られる。 ZとD*の間をgit-bisectするとY*が問題だと指 摘できる。
  • 17. gitの内部構造  オブジェクト  blob:ファイルの中身  tree:ディレクトリ構造  commit:コミット  tag:タグ  オブジェクトはすべてzlibで圧縮されSHA1ハッシュ を持つ。  ハッシュ値:40桁16進
  • 18. gitをgitを利用して理解する  Read the git source code using by git!  ソースコードのコピー $ time git clone git://git.kernel.org/pub/scm/git/git.git;date Initialized empty Git repository in /proj/git/.git/ remote: Counting objects: 72046, done. remote: Compressing objects: 100% (21922/21922), done. remote: Total 72046 (delta 51731), reused 68367 (delta 48756) Receiving objects: 100% (72046/72046), 15.46 MiB | 803 KiB/s, done. Resolving deltas: 100% (51731/51731), done. real 0m59.271s user 0m30.590s sys 0m1.224s 2008年 5月 16日 金曜日 09:00:07 JST
  • 19. gitをgitを利用して理解する  最初のコミットにアクセス $ git checkout e83c5163 $ git checkout e83c5163 Note: moving to "e83c5163" which isn't a local branch If you want to create a new branch from this checkout, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new_branch_name> HEAD is now at e83c516... Initial revision of "git", the information manager from hell hyoshiok@hyoshiok-laptop:/proj/git$ ls Makefile cache.h commit-tree.c read-cache.c show-diff.c write-tree.c README cat-file.c init-db.c read-tree.c update-cache.c hyoshiok@hyoshiok-laptop:/proj/git$ wc * 40 99 957 Makefile 168 1415 8392 README 93 350 2484 cache.h 23 66 503 cat-file.c 172 576 4103 commit-tree.c 51 186 1198 init-db.c 259 820 5681 read-cache.c 43 133 986 read-tree.c 81 245 2034 show-diff.c 248 767 5395 update-cache.c 66 223 1441 write-tree.c 1244 4880 33174 合計
  • 20. gitをgitを利用して理解する  最初のコミットは1000行程度のプログラムであ った。  READMEを読む  Makefileを読む  makeしてみる(libssl-debパッケージをインスト ールしておく)
  • 21. 様々な話題  gitk (git GUI)  tcl, tk(wish) で実装  github  git向けのホスティングサービス
  • 22. gitを利用する主なOSSプロジェクト  Linux  git  X  samba