SlideShare a Scribd company logo
1 of 53
Download to read offline
Git overview


                 Version 0.96

This work is licensed under a Creative Commons
  Attribution-ShareAlike 3.0 Unported License.

      Tatsuki Sugiura <sugi@nemui.org>
Agenda
●
    バージョン管理システムってどういうもの?
●
    git のモデルとローカル操作
●
    git でのリモート連携
●
    参考資料など




                           2
git とは...
●
    発音は [ɡít] (ぎっと)
●
    Linus Tovals が Linux kernel のために作成したバージョンコント
    ロールシステム
●
    Linux kernel 以外でも幅広く使われるように (xorg, rails, wine,
    cairo...)
●
    コミットツリーのモデルを素直に実装
●
    ハッシュをキーにしたオブジェクトDB
●
    中央サーバに依存しない分散モデル (分散レポジトリ)
●
    十分な機能性 (このスライドでは説明しません)
    –   きわめて高速
    –   強力なマージ機構とマージの履歴情報
    –   差分圧縮によるストレージの効率化
                                                      3
バージョン管理システム (VCS)
●
    動機
    –   修正を世代ごとに取っておきたい
    –   修正の履歴を簡単にみたい
    –   修正差分の確認を簡単にしたい
●
    有名なオープンソースツール
    –   RCS, CVS, Subversion (svn), bazzar (bzr), mercurial (hg),
        git (new!)
●
    SCM (Software Configuration Management) ツールと
    呼ばれたりも


                                                                    4
VCS/SCMでよく使われる用語
●
    リポジトリ              ●
                           ブランチ
    –   全ての履歴データを保存し       –   修正の流れを分岐する仕組
        ている場所                  み
●
    チェックアウト            ●
                           マージ
    –   リポジトリからデータを取       –   並行して行われた複数の修
        り出す                    正を併合すること
●
    コミット/チェックイン        ●
                           コンフリクト
    –   リポジトリに修正した内容       –   マージの際、修正内容が競
        を書きこむ                  合すること (同じ箇所に別
                               の修正を行う、など)
●
    作業ツリー/作業コピー
    –   実際の編集作業を行う為に
        ファイルを展開した場所
                                               5
概念的ワークフロー
●
    最初にレポジトリから作業用ディレクトリ(作業ツリー)
    にファイルを展開 = チェックアウト
●
    作業ツリーを変更
●
    変更点をレポジトリに書き戻す = チェックイン
●
    問題が起きたら
    –   単純に古いバージョンをチェックアウトして差し戻す
    –   最近の修正差分をみて、問題点を発見 → 修正




                                   6
git local




(ローカル編)




            7
git のモデル(1) - コミットツリー
●
    メインのデータ構造      XXサイト、最初のバージョン

●
    コミットの親子関係      タイトル画像を追加
    を示す
                   イベント情報を追加
●
    git を使う上で最重要
                      タイトルを冬バージョンへ
    要素! 常にツリー
    の状態を把握しよう         冬のイベントを追加


                   日付が間違っていたのを修正




                                     8
(余談)「ツリー」とは言うけど
●
    実際には片方向有向
    グラフ
    –   ルートノードは複数
        存在することがある
    –   各ノードは1つ以上
        の親への参照を持つ
        (ルート以外)




                          9
git のモデル(2) - オブジェクトDB
●
    SHA1 Digetst をキーにした Key-Value ストレージ
●
    実体はレポジトリトップの .git の下に存在する
●
    主なオブジェクトタイプ
    –   commit: コミットメッセージとメタ情報
    –   tree: ディレクトリ
    –   blob: ファイルの実体
●
    Blob はバイナリそのまま、それ以外は RFC822 風(?)
    の形式で表したテキストのダイジェストを取るだけ



                                          10
オブジェクトの関連

commit                   blob
           tree
                         blob


                                blob
                  tree
                                blob
commit
                                       blob
                         tree

commit     tree                        blob
                         blob



                                              11
実際の例: commit オブジェクト

 Proper timezone handling without needing activesupport
 c7e7f0fe36798ebfbad51f73988e9ec1ceba30d8

 Update install instructions
 da7f4396d920a5a61039da6a28486caf6705474d

 CA: Remembrance Day typo -- closes GH-4
 b94712703db282e8e227df510997c19ae0843f50



     tree 298e00bf81e1cb8f185bb0f3f3a7e36c4fe6de1e
     parent b94712703db282e8e227df510997c19ae0843f50
     author Alex Dunae <alex@dunae.ca> 1289601832 -0800
     committer Alex Dunae <alex@dunae.ca> 1289601832 -0800

     Update install instructions



                                                             12
実際の例: tree オブジェクト
tree 298e00bf81e1cb8f185bb0f3f3a7e36c4fe6de1e
parent b94712703db282e8e227df510997c19ae0843f50
author Alex Dunae <alex@dunae.ca> 1289601832 -0800
committer Alex Dunae <alex@dunae.ca> 1289601832 -0800

Update install instructions


  100644    blob   39272ef0e0f5a05647812a57cebd1b3644770105 .gitignore
  100644    blob   01c496d464df1deddb853119e8b61777e5703a67 CHANGELOG
  100644    blob   c5834ab3f785778b6ddd221c806ab1a3ba2045f7 LICENSE
  100644    blob   ec0cdcc95d268d7a9a8702263db25166ec69c052 README.rdoc
  100644    blob   715efbe1e1832ea19b4fa8c302e1ac53a6b61069 REFERENCES
  040000    tree   504df98c21286faaa64e5cb0f5d712b14d85ae08 data
  100644    blob   34327c0c81423708c4ee818cbfd71df916e3441e holidays.gemsp
  040000    tree   c1cf84305ab68f2150ae5588fdb33288f6a68de4 lib
  100644    blob   618f85767bf69a20f380f50320fdf63955eec1ce rakefile.rb
  040000    tree   0ba469d863ceccc2ecf5c7474be59e85a6c6e647 test



                                                                    13
実際の例: blob オブジェクト
100644   blob   39272ef0e0f5a05647812a57cebd1b3644770105 .gitignore
100644   blob   01c496d464df1deddb853119e8b61777e5703a67 CHANGELOG
100644   blob   c5834ab3f785778b6ddd221c806ab1a3ba2045f7 LICENSE
100644   blob   ec0cdcc95d268d7a9a8702263db25166ec69c052 README.rdoc
...


   = Ruby Holidays Gem

   A set of functions to deal with holidays in Ruby.

   Extends Ruby's built-in Date class and supports custom holiday definition lists.

   === Installation

   To install the gem from RubyGems:

    gem install holidays

   === Examples


                                                                                      14
git のモデル(3) - リファレンス
●
    ブランチ、タグなどオブジェクトではない参
    照ラベル
●
    任意の名前を持ち、通常は commit の SHA1
    を指している




                                 15
ブランチとタグ
●
    一つのコミットのSHA1を        release_01
    指しているラベル
●
    ブランチはコミットが進む
    と移動していく                      db-tune

●
    タグは移動しない
●
    このスライドでは説明しな
                                  experimental
    いけど注意:
    ラベルではない annotated
    tag というのもある (DB に
    オブジェクトとして記録さ          release_02
    れる)
                        master
                                           16
HEAD
●
    現在チェックアウトしてい          release_01
    るブランチを指すポインタ
●
    操作対象を省略した場合は
    たいてい自動的に HEAD (も              db-tune
    しくは HEAD がさしている
    ブランチ) を対象にする
●
    コミットのSHA1を直接指す                 experimental
    こともできる (例外的な使い
    方)

                           release_02
                                        HEAD
                         master
                                            17
git コマンド
●
    レポジトリに cd して、git <サブコマンド>
●
    今から使うサブコマンド
    –   init: レポジトリ初期化
    –   add: ファイルをコミット予定(index)に追加
    –   commit: 実際のコミットを行う
    –   branch: ブランチの一覧、作成、削除
    –   checkout: 指定したブランチをチェックアウトし
        作業ツリーを更新

                                      18
git の具体的な作業の流れの例
●
  レポジトリを作る
  – git init
●
  コミット予定に追加する
  – git add
●
  コミット
  – git commit
●
  別作業をするためにブランチを作成
  – git branch
●
  新しいブランチに切り替える
  – git checkout
●
  修正してコミット
  – git commit -av
●
  元のブランチに戻る
  – git checkout
                       19
実際の例とレポジトリの動き (1)
●
    レポジトリを作る
     $ mkdir try-git
     $ cd try-git
     $ git init

●
    ファイルを作って add
     $ date > date.txt
     $ git add date.txt
                                                    HEAD

●   commit                                 master

     $ git commit -v -m 'First commit'   First commit


                                                        20
実際の例とレポジトリの動き (2)
                                                 master
                                                                     HEAD
●
    ファイルを変更する                                         First commit

     $ date > date.txt                                (working copy)

●
    git add で変更した                                master
                                                                     HEAD

    ファイルをステージ                                         First commit

    (indexに登録)する                                      (index)

     $ git add date.txt
                                                      (working copy)
●   commit
                                                      First commit
    $ git comit -v -m 'Update data.txt'
                                          HEAD        Update date.txt

                                                     master                 21
実際の例とレポジトリの動き (3)
                                                    First commit

●
    ブランチを作る                          ns-stamp       Update date.txt
    $ git branch ns-stamp
                                           master          HEAD

●
    ブランチに移動                           HEAD          First commit
                                                           master
    $ git checkout ns-stamp
                                     ns-stamp       Update date.txt
●
    ブランチでコミット
                                                    First commit
    $ date “+%s.%N” > stamp
    $ git add stamp                                        master
    $ git commit -m 'Add ns stamp'    HEAD          Update date.txt


                                     ns-stamp       Add ns stamp

                                                                      22
実際の例とレポジトリの動き (4)
                                                                First commit
●
     master ブランチに戻る                                                      master
                                               ns-stamp         Update date.txt
     $ git checkout master                                                     HEAD
                                                          Add ns stamp


                                                                (Working copy)
●
     コミット
    $ date > date.txt                                           First commit
    $ git comit -av -m 'Update date, again.'
                                                                Update date.txt
                                         ns-stamp
                                                                               HEAD
                                                          Add ns stamp
                                                                         master
                                                                Update date, again
                                                                                     23
実際の例とレポジトリの動き (5)
                                            First commit
●
    ns-stamp ブランチを
    マージ                    ns-stamp         Update date.txt

    $ git merge ns-stamp
                                      Add ns stamp


                                            Update date, again



                                            Merge branch 'ns-stamp'


                                              master


                                                       HEAD


                                                                 24
ブランチ(ラベル)は重要
●
    ブランチのついていないコミットの枝は見え
    なくなる(そしてそのうちgcで回収される)
●
    マージや複数のレポジトリ連携でもブランチ
    を使って操作する
●
    常にツリーの状態を意識(チェック)しよう
    –   gitk --all
    –   git log --graph



                            25
git log --graph




                  26
gitk --all




             27
git remote




(リモート編)




             28
Git の分散レポジトリ
●
    各人がそれぞれ、(完全な)レポジトリと作業ツリーのセッ
    トを持つ
●
    システム的には中央は存在しない
    –   でも概念的には作ってもいい
    –   実際のプロジェクト運営では作成する事が多い
    –   その場合は作業ツリーを持たない特殊(bare)なレポジトリを作る
        といい
●
    組織、運用に合わせて好きなように構成可能
●
    レポジトリ間で足らないオブジェクトを送り合う
●
    作業ツリーへの操作や反映は、各々で行う

                                           29
自分のレポジトリと
     作業ツリーの間で作業

     Alice                   Rob


     Checkout                Checkout
WT    Commit    Repos   WT   Commit     Repos




                                                30
それぞれのレポジトリ間でやりとり
                                 Joe

                            WT
        Alice                     Repos



   WT    Repos




                      Rob

                 WT    Repos




                                          31
中央にレポジトリを置く運用
              Bare Repository

                     Repos




     Alice                           Joe

WT
                      Rob       WT
      Repos                           Repos

                WT      Repos




                                              32
それぞれが公開用
                レポジトリを持つ場合
Alice's public repo                       Joe's public repo

                      Rob's public repo
        Repos                                     Repos


                              Repos


         Alice                                     Joe

   WT
                               Rob           WT
           Repos                                     Repos

                         WT      Repos



                                                             33
マージ(pull)機構付きの特殊な
     公開レポジトリ(githubなど)
Alice's public repo                       Joe's public repo

                      Rob's public repo
        Repos                                     Repos


                              Repos


         Alice                                     Joe

   WT
                               Rob           WT
           Repos                                     Repos

                         WT      Repos



                                                             34
リモートレポジトリ連携
●
    単にお互いを比較して、存在しないオブジェクトを交換する
●
    操作
    –   clone: レポジトリをコピーして新たなレポジトリを作成
    –   fetch: 相手のレポジトリから自分に無い部分を取得
    –   push: 自分のレポジトリから相手にオブジェクトを書き込み、相手の
        ブランチラベルを移動させる
    –   pull: fetch + merge
●
    外部レポジトリURLを名前(ラベル)を付けて管理
    –   例: (URL=) http://github.com/sugi/btr-backup.git => (ラベル) github
    –   標準の参照先(clone元)はディフォルトでは origin と言う名前



                                                                          35
リモートブランチ
●
    外部レポジトリとの連携のキモ
●
    相手の持っているブランチが、単純に“リモートレポジトリ名/
    ブランチ名”と言う名前のブランチに見える
    –   "sfjp" という名前の付けられたリモート URL
        https://scm.users.sourceforge.jp/gitroot/sugi/try1 上の
        "dev" ブランチ → "sfjp/dev" (もしくは remotes/sfjp/dev)
●
    リモートブランチはラベルを直接動かせない (チェックアウトし
    た場合、HEAD はブランチではなくコミットを直接指す)
●
    コミットを追加する(その枝を伸ばす)時はリモートブランチを元
    にローカルブランチを作る
    –   直接 push するならリモートと同名のブランチを作るとよい
        ●
            例: git checkout -b dev origin/dev


                                                                36
実際の操作: リモート編 (1)
  ●
       リモートから clone
             $ git clone host2.example.com:git/try

origin/master                                        origin
                   First commit                               First commit

      master       Add README.txt                              Add README.txt
                                                     master
                                                               Makefie automation
                   Makefie automation
      HEAD                                           HEAD
                                        clone                 autoupdate
                   origin/autoupdate




                                                                                37
実際の操作: リモート編 (2)
  ●
       ローカルの master ブランチを変更
             $ git commit -av -m 'Fix typo'

origin/master                                 origin
                   First commit                        First commit

                   Add README.txt                       Add README.txt
                                              master
                        origin/autoupdate               Makefie automation
                      Makefie automation
      HEAD                                    HEAD
                                                       autoupdate
      master       Fix typo




                                                                         38
実際の操作: リモート編 (3)
●
     origin に push
           $ git push

                                                 origin
                 First commit                             First commit

                 Add README.txt                           Add README.txt
                      origin/autoupdate                      autoupdate
                    Makefie automation                       Makefie automation
    HEAD

    master       Fix typo                                 Fix typo
                                                 master
                   origin/master          push
                                                 HEAD



                                                                         39
実際の操作: リモート編 (4)
●
     リモートブランチを元にローカルブランチを
     作成し、そこにカレントブランチを移動
           $ git checkout -b autoupdate origin/autoupdate
                                                 origin
                 First commit                               First commit

                 Add README.txt                             Add README.txt
    HEAD
                      origin/autoupdate                        autoupdate
autoupdate          Makefie automation                         Makefie automation


    master      Fix typo                                    Fix typo
                                                master
                   origin/master
                                                HEAD



                                                                           40
実際の操作: リモート編 (5)
  ●
       ローカルでバグフィクスしてmasterにマージ
           $ git commit -av -m 'Fix automation bug'
           $ git checkout master
           $ git merge autoupdate
                                                  origin
                  First commit                             First commit

                  Add README.txt                           Add README.txt
                       origin/autoupdate                      autoupdate
                     Makefie automation                       Makefie automation
origin/master
                  Fix typo                                 Fix typo
                     Fix automation bug          master

                     autoupdate                  HEAD
      master      merge autoupdate

           HEAD
                                                                          41
実際の操作: リモート編 (6)
  ●
       リモートの master が誰かに更新された


                                           origin
                  First commit                      First commit

                  Add README.txt                    Add README.txt
                       origin/autoupdate               autoupdate
                     Makefie automation                Makefie automation
origin/master
                  Fix typo                          Fix typo
                     Fix automation bug
                     autoupdate                     Add License file
                                           master
      master      merge autoupdate
                                           HEAD
           HEAD
                                                                       42
実際の操作: リモート編 (7)
  ●
      origin を pull (の fetch 部分の様子)
          $ git pull

                                                          origin
                     First commit                                  First commit
                     Add README.txt
                            origin/autoupdate                      Add README.txt
                                                                      autoupdate
                         Makefie automation
                                                                      Makefie automation
                    Fix typo autoupdate
origin/master                                                      Fix typo
                        Fix automation bug
                                                  pull
                Add License file                (fetch)
                                                                   Add License file
                    merge autoupdate                      master
      HEAD
                                                          HEAD
             master
                                                                                      43
実際の操作: リモート編 (8)
  ●
       origin を pull (の merge 部分)
           $ git pull

                                                origin
                     First commit                        First commit
                     Add README.txt
                            origin/autoupdate            Add README.txt
                                                            autoupdate
                         Makefie automation
                                                            Makefie automation
                    Fix typo autoupdate
origin/master                                            Fix typo
                        Fix automation bug
                Add License file
                                                         Add License file
 HEAD                                           master
                    merge autoupdate
      master
                    merge origin/master         HEAD
                                                                            44
実際の操作: リモート編 (9)
 ●
      origin に変更をふたたび push
          $ git push

                                                        origin
                   First commit                                     First commit
                   Add README.txt                                   Add README.txt
                                                     autoupdate
                          origin/autoupdate
                       Makefie automation                              Makefie automation
                  Fix typo autoupdate                              Fix typo
                       Fix automation bug                              Fix automation bug
              Add License file                                 Add License file
HEAD                                          push
                  merge autoupdate                                 merge autoupdate
     master          origin/master                    HEAD
                  merge origin/master                              merge origin/master
                                                      master
                                                                                      45
Pushの補足と注意
●
    基本的に push する前に pull すること!
●
    標準では HEAD の指しているブランチだけが相手に送られ、同名のリ
    モートブランチラベルを移動する
    –   送るブランチ、動かすブランチの都度指定は可能。設定変更して標準で送る物を
        変更することもできる
    –   push によって相手に新しいブランチを作成する事もできる (空のレポジトリに
        push する場合は指定が必須)
●
    Push 先が作業ツリーを持っている場合(bare でない場合)、標準では相手
    の HEAD のさしているブランチは動かせない
●
    相手のブランチを動かすには、"FastForward" である必要がある
    –   FastForward = 前方向に動かすだけで新しい位置に行けること
    –   マージの場合は、ちゃんとツリー上で繋がっている必要がある (手で同じ修正を
        入れた場合はFast Forward にならない)
●
    最初は相互に pull だけ使ったほうがわかりやすい
                                                  46
レポジトリ間連携プロトコル
●
    アクセスプロトコルは色々
    –   ローカルファイルシステム (fsのアクセスコントロールに従う)
    –   git オリジナルプロトコル (認証がないので基本 read-only)
    –   ssh (ログイン先のアクセスコントロールに従う)
    –   HTTP(S) (プロトコル2種類: smart, dumb. R/W 可)
●
    git URL の例
    –   (LocalFS) /home/sugi/works/git/try1
    –   (ssh) host2:works/git/try1 sugi@host2.jp:/gitroot/try1
    –   (git) git://host2.example.com/gitroot/try1
    –   (HTTP) https://scm.users.sourceforge.jp/gitroot/sugi/try1



                                                                    47
git refs




(参考と補足)




            48
鉄板の参考書籍: 入門Git




●
    秀和システム ISBN:978-4798023809
●
    現在の Git の開発者/プロジェクトリーダ/メンテナである 濱野純
    氏が書いた書籍
●
    題名と違い、ぜんぜん入門だけじゃない
●
    設計理念から内部構造、具体的な操作と例、Tips、コミュニティ
    まですべて詰まってます

                                         49
参考文書
●
    man 7 gittutorial (日本語訳)
    http://www8.atwiki.jp/git_jp/pub/git-manual-jp/Documentation/gittutorial.html

●
    サルでもわかるGit入門
    http://www.backlog.jp/git-guide/

●
    A successful Git branching model (日本語訳)
    http://keijinsonyaban.blogspot.jp/2010/10/successful-git-branching-model.html

●   Pro Git
    http://www8.atwiki.jp/git_jp/pub/git-manual-jp/Documentation/gittutorial.html

●   Git Cheat Sheet
    https://na1.salesforce.com/help/doc/en/salesforce_git_developer_cheatsheet.pdf




                                                                                     50
設定など
●
    git config --global user.name "名前"
    git config --global user.email メールアドレス
    –   この2つは必ず設定しておこう
●   git config --global color.ui auto
    –   これを設定しておくと、各種出力が色つきになって見やすい
●   git config --global alias.st status
    git config --global alias.co checkout
    –   よく使うコマンドは省略形のエイリアスを作っておくと楽になる




                                             51
覚えておくと便利なサブコマンド等
●
    reset: HEAD と HEAD が指しているブランチラベルを好きな場所
    に移動する
    –   --hard を付けると作業ツリーも更新する
    –   git reset --hard だけなら現在の作業ツリーをリセット
●
    gui: tk 版 gui を起動する。Index の状態を表示/操作するには便利
●
    mergetool: 衝突時に gui のマージツール (meld, qdiff3 など) を起動
    してマージを行う。エディタで編集するよりこちらの方が楽な場合
    も多い
●
    revert: 指定したコミットを反転したコミットを作成し、修正を打
    ち消す
●
    commit には必ず -v をつけよう。ログ編集時に Diff が確認できる


                                                        52
Git のホスティングサービス
●   SourceForge.JP
●   github.com
●   Google Code
●   SourceForget.net
●   repo.or.cz
●
    他にも海外にはたくさん



                         53

More Related Content

What's hot

「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisitedUptime Technologies LLC (JP)
 
Postgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etcPostgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etckasaharatt
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)Hironobu Suzuki
 
OSS-DB Goldへの第一歩~実践!運用管理~
OSS-DB Goldへの第一歩~実践!運用管理~OSS-DB Goldへの第一歩~実践!運用管理~
OSS-DB Goldへの第一歩~実践!運用管理~Shigeru Hanada
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 
明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理Yuto Matsukubo
 
OSC東京2013/Spring_JPUG資料
OSC東京2013/Spring_JPUG資料OSC東京2013/Spring_JPUG資料
OSC東京2013/Spring_JPUG資料Chika SATO
 
Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Toshi Harada
 
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告Uptime Technologies LLC (JP)
 
仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題にmagoroku Yamamoto
 
Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Teloo
 
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Hiraku Toyooka
 
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#135ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13Uptime Technologies LLC (JP)
 
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介Insight Technology, Inc.
 

What's hot (18)

「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited
 
Tokyo.R#16 wdkz
Tokyo.R#16 wdkzTokyo.R#16 wdkz
Tokyo.R#16 wdkz
 
Postgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etcPostgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etc
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
OSS-DB Goldへの第一歩~実践!運用管理~
OSS-DB Goldへの第一歩~実践!運用管理~OSS-DB Goldへの第一歩~実践!運用管理~
OSS-DB Goldへの第一歩~実践!運用管理~
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
 
OSC東京2013/Spring_JPUG資料
OSC東京2013/Spring_JPUG資料OSC東京2013/Spring_JPUG資料
OSC東京2013/Spring_JPUG資料
 
PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5
 
Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
 
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
 
PostgreSQL Query Cache - "pqc"
PostgreSQL Query Cache - "pqc"PostgreSQL Query Cache - "pqc"
PostgreSQL Query Cache - "pqc"
 
仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に
 
Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)
 
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
 
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#135ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
 
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
 

Viewers also liked (17)

Tutorial primaria
Tutorial primariaTutorial primaria
Tutorial primaria
 
Archivo011
Archivo011Archivo011
Archivo011
 
3 Dportfolio2
3 Dportfolio23 Dportfolio2
3 Dportfolio2
 
Archivo019
Archivo019Archivo019
Archivo019
 
Archivo016
Archivo016Archivo016
Archivo016
 
Archivo015
Archivo015Archivo015
Archivo015
 
3 D Design Portfolio3
3 D Design Portfolio33 D Design Portfolio3
3 D Design Portfolio3
 
Archivo004
Archivo004Archivo004
Archivo004
 
3 D Design Portfolio4
3 D Design Portfolio43 D Design Portfolio4
3 D Design Portfolio4
 
FLOSSとフリーカルチャーの流れ
FLOSSとフリーカルチャーの流れFLOSSとフリーカルチャーの流れ
FLOSSとフリーカルチャーの流れ
 
Archivo024
Archivo024Archivo024
Archivo024
 
Archivo013
Archivo013Archivo013
Archivo013
 
Portfolio
PortfolioPortfolio
Portfolio
 
Técnicas de animación a la lectura
Técnicas de animación a la lecturaTécnicas de animación a la lectura
Técnicas de animación a la lectura
 
Archivo001
Archivo001Archivo001
Archivo001
 
LA MATRIZ TIC HERRAMIENTA PARA PLANIFICAR EN INSTITUCIONES EDUCATIVAS
LA MATRIZ TIC HERRAMIENTA PARA PLANIFICAR EN INSTITUCIONES EDUCATIVASLA MATRIZ TIC HERRAMIENTA PARA PLANIFICAR EN INSTITUCIONES EDUCATIVAS
LA MATRIZ TIC HERRAMIENTA PARA PLANIFICAR EN INSTITUCIONES EDUCATIVAS
 
Vida de la virgen maria
Vida de la virgen mariaVida de la virgen maria
Vida de la virgen maria
 

Similar to Git overview (v 0.96)

Git lev 1-おひとりさま用-
Git lev 1-おひとりさま用-Git lev 1-おひとりさま用-
Git lev 1-おひとりさま用-Kentarou Kurashige
 
ソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHubソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHubToru Tamaki
 
git 初めの一歩
git 初めの一歩git 初めの一歩
git 初めの一歩Shin Yoshida
 
Version Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルVersion Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルComputational Materials Science Initiative
 
(工事中) Git の仕組み
(工事中) Git の仕組み(工事中) Git の仕組み
(工事中) Git の仕組みTeloo
 
(工事中) Git の仕組み
(工事中) Git の仕組み(工事中) Git の仕組み
(工事中) Git の仕組みTeloo
 
今さら聞けない人のためのGit超入門 GitLab 14対応版
今さら聞けない人のためのGit超入門 GitLab 14対応版今さら聞けない人のためのGit超入門 GitLab 14対応版
今さら聞けない人のためのGit超入門 GitLab 14対応版VirtualTech Japan Inc./Begi.net Inc.
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザktateish
 
バージョン管理システムチュートリアル
バージョン管理システムチュートリアルバージョン管理システムチュートリアル
バージョン管理システムチュートリアルRyo Igarashi
 
Gitを使ってみよう
Gitを使ってみようGitを使ってみよう
Gitを使ってみようTamotsu Furuya
 
15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門to_ueda
 
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え Nobuhiro Iwamatsu
 

Similar to Git overview (v 0.96) (20)

Git (実践入門編)
Git (実践入門編)Git (実践入門編)
Git (実践入門編)
 
Git lev 1-おひとりさま用-
Git lev 1-おひとりさま用-Git lev 1-おひとりさま用-
Git lev 1-おひとりさま用-
 
ソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHubソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHub
 
Git for beginners
Git for beginnersGit for beginners
Git for beginners
 
git 初めの一歩
git 初めの一歩git 初めの一歩
git 初めの一歩
 
Version Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルVersion Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアル
 
Git
GitGit
Git
 
(工事中) Git の仕組み
(工事中) Git の仕組み(工事中) Git の仕組み
(工事中) Git の仕組み
 
(工事中) Git の仕組み
(工事中) Git の仕組み(工事中) Git の仕組み
(工事中) Git の仕組み
 
Git 勉強会
Git 勉強会Git 勉強会
Git 勉強会
 
今さら聞けない人のためのgit超入門
今さら聞けない人のためのgit超入門今さら聞けない人のためのgit超入門
今さら聞けない人のためのgit超入門
 
今さら聞けない人のためのGit超入門 GitLab 14対応版
今さら聞けない人のためのGit超入門 GitLab 14対応版今さら聞けない人のためのGit超入門 GitLab 14対応版
今さら聞けない人のためのGit超入門 GitLab 14対応版
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザ
 
バージョン管理システムチュートリアル
バージョン管理システムチュートリアルバージョン管理システムチュートリアル
バージョン管理システムチュートリアル
 
Git/GitHub
Git/GitHubGit/GitHub
Git/GitHub
 
Gitを使ってみよう
Gitを使ってみようGitを使ってみよう
Gitを使ってみよう
 
Git 実践入門
Git 実践入門Git 実践入門
Git 実践入門
 
今さら聞けない人のためのGit超入門
今さら聞けない人のためのGit超入門今さら聞けない人のためのGit超入門
今さら聞けない人のためのGit超入門
 
15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門
 
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
 

Recently uploaded

IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也harmonylab
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...yoshidakids7
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 

Recently uploaded (13)

2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 

Git overview (v 0.96)

  • 1. Git overview Version 0.96 This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Tatsuki Sugiura <sugi@nemui.org>
  • 2. Agenda ● バージョン管理システムってどういうもの? ● git のモデルとローカル操作 ● git でのリモート連携 ● 参考資料など 2
  • 3. git とは... ● 発音は [ɡít] (ぎっと) ● Linus Tovals が Linux kernel のために作成したバージョンコント ロールシステム ● Linux kernel 以外でも幅広く使われるように (xorg, rails, wine, cairo...) ● コミットツリーのモデルを素直に実装 ● ハッシュをキーにしたオブジェクトDB ● 中央サーバに依存しない分散モデル (分散レポジトリ) ● 十分な機能性 (このスライドでは説明しません) – きわめて高速 – 強力なマージ機構とマージの履歴情報 – 差分圧縮によるストレージの効率化 3
  • 4. バージョン管理システム (VCS) ● 動機 – 修正を世代ごとに取っておきたい – 修正の履歴を簡単にみたい – 修正差分の確認を簡単にしたい ● 有名なオープンソースツール – RCS, CVS, Subversion (svn), bazzar (bzr), mercurial (hg), git (new!) ● SCM (Software Configuration Management) ツールと 呼ばれたりも 4
  • 5. VCS/SCMでよく使われる用語 ● リポジトリ ● ブランチ – 全ての履歴データを保存し – 修正の流れを分岐する仕組 ている場所 み ● チェックアウト ● マージ – リポジトリからデータを取 – 並行して行われた複数の修 り出す 正を併合すること ● コミット/チェックイン ● コンフリクト – リポジトリに修正した内容 – マージの際、修正内容が競 を書きこむ 合すること (同じ箇所に別 の修正を行う、など) ● 作業ツリー/作業コピー – 実際の編集作業を行う為に ファイルを展開した場所 5
  • 6. 概念的ワークフロー ● 最初にレポジトリから作業用ディレクトリ(作業ツリー) にファイルを展開 = チェックアウト ● 作業ツリーを変更 ● 変更点をレポジトリに書き戻す = チェックイン ● 問題が起きたら – 単純に古いバージョンをチェックアウトして差し戻す – 最近の修正差分をみて、問題点を発見 → 修正 6
  • 8. git のモデル(1) - コミットツリー ● メインのデータ構造 XXサイト、最初のバージョン ● コミットの親子関係 タイトル画像を追加 を示す イベント情報を追加 ● git を使う上で最重要 タイトルを冬バージョンへ 要素! 常にツリー の状態を把握しよう 冬のイベントを追加 日付が間違っていたのを修正 8
  • 9. (余談)「ツリー」とは言うけど ● 実際には片方向有向 グラフ – ルートノードは複数 存在することがある – 各ノードは1つ以上 の親への参照を持つ (ルート以外) 9
  • 10. git のモデル(2) - オブジェクトDB ● SHA1 Digetst をキーにした Key-Value ストレージ ● 実体はレポジトリトップの .git の下に存在する ● 主なオブジェクトタイプ – commit: コミットメッセージとメタ情報 – tree: ディレクトリ – blob: ファイルの実体 ● Blob はバイナリそのまま、それ以外は RFC822 風(?) の形式で表したテキストのダイジェストを取るだけ 10
  • 11. オブジェクトの関連 commit blob tree blob blob tree blob commit blob tree commit tree blob blob 11
  • 12. 実際の例: commit オブジェクト Proper timezone handling without needing activesupport c7e7f0fe36798ebfbad51f73988e9ec1ceba30d8 Update install instructions da7f4396d920a5a61039da6a28486caf6705474d CA: Remembrance Day typo -- closes GH-4 b94712703db282e8e227df510997c19ae0843f50 tree 298e00bf81e1cb8f185bb0f3f3a7e36c4fe6de1e parent b94712703db282e8e227df510997c19ae0843f50 author Alex Dunae <alex@dunae.ca> 1289601832 -0800 committer Alex Dunae <alex@dunae.ca> 1289601832 -0800 Update install instructions 12
  • 13. 実際の例: tree オブジェクト tree 298e00bf81e1cb8f185bb0f3f3a7e36c4fe6de1e parent b94712703db282e8e227df510997c19ae0843f50 author Alex Dunae <alex@dunae.ca> 1289601832 -0800 committer Alex Dunae <alex@dunae.ca> 1289601832 -0800 Update install instructions 100644 blob 39272ef0e0f5a05647812a57cebd1b3644770105 .gitignore 100644 blob 01c496d464df1deddb853119e8b61777e5703a67 CHANGELOG 100644 blob c5834ab3f785778b6ddd221c806ab1a3ba2045f7 LICENSE 100644 blob ec0cdcc95d268d7a9a8702263db25166ec69c052 README.rdoc 100644 blob 715efbe1e1832ea19b4fa8c302e1ac53a6b61069 REFERENCES 040000 tree 504df98c21286faaa64e5cb0f5d712b14d85ae08 data 100644 blob 34327c0c81423708c4ee818cbfd71df916e3441e holidays.gemsp 040000 tree c1cf84305ab68f2150ae5588fdb33288f6a68de4 lib 100644 blob 618f85767bf69a20f380f50320fdf63955eec1ce rakefile.rb 040000 tree 0ba469d863ceccc2ecf5c7474be59e85a6c6e647 test 13
  • 14. 実際の例: blob オブジェクト 100644 blob 39272ef0e0f5a05647812a57cebd1b3644770105 .gitignore 100644 blob 01c496d464df1deddb853119e8b61777e5703a67 CHANGELOG 100644 blob c5834ab3f785778b6ddd221c806ab1a3ba2045f7 LICENSE 100644 blob ec0cdcc95d268d7a9a8702263db25166ec69c052 README.rdoc ... = Ruby Holidays Gem A set of functions to deal with holidays in Ruby. Extends Ruby's built-in Date class and supports custom holiday definition lists. === Installation To install the gem from RubyGems: gem install holidays === Examples 14
  • 15. git のモデル(3) - リファレンス ● ブランチ、タグなどオブジェクトではない参 照ラベル ● 任意の名前を持ち、通常は commit の SHA1 を指している 15
  • 16. ブランチとタグ ● 一つのコミットのSHA1を release_01 指しているラベル ● ブランチはコミットが進む と移動していく db-tune ● タグは移動しない ● このスライドでは説明しな experimental いけど注意: ラベルではない annotated tag というのもある (DB に オブジェクトとして記録さ release_02 れる) master 16
  • 17. HEAD ● 現在チェックアウトしてい release_01 るブランチを指すポインタ ● 操作対象を省略した場合は たいてい自動的に HEAD (も db-tune しくは HEAD がさしている ブランチ) を対象にする ● コミットのSHA1を直接指す experimental こともできる (例外的な使い 方) release_02 HEAD master 17
  • 18. git コマンド ● レポジトリに cd して、git <サブコマンド> ● 今から使うサブコマンド – init: レポジトリ初期化 – add: ファイルをコミット予定(index)に追加 – commit: 実際のコミットを行う – branch: ブランチの一覧、作成、削除 – checkout: 指定したブランチをチェックアウトし 作業ツリーを更新 18
  • 19. git の具体的な作業の流れの例 ● レポジトリを作る – git init ● コミット予定に追加する – git add ● コミット – git commit ● 別作業をするためにブランチを作成 – git branch ● 新しいブランチに切り替える – git checkout ● 修正してコミット – git commit -av ● 元のブランチに戻る – git checkout 19
  • 20. 実際の例とレポジトリの動き (1) ● レポジトリを作る $ mkdir try-git $ cd try-git $ git init ● ファイルを作って add $ date > date.txt $ git add date.txt HEAD ● commit master $ git commit -v -m 'First commit' First commit 20
  • 21. 実際の例とレポジトリの動き (2) master HEAD ● ファイルを変更する First commit $ date > date.txt (working copy) ● git add で変更した master HEAD ファイルをステージ First commit (indexに登録)する (index) $ git add date.txt (working copy) ● commit First commit $ git comit -v -m 'Update data.txt' HEAD Update date.txt master 21
  • 22. 実際の例とレポジトリの動き (3) First commit ● ブランチを作る ns-stamp Update date.txt $ git branch ns-stamp master HEAD ● ブランチに移動 HEAD First commit master $ git checkout ns-stamp ns-stamp Update date.txt ● ブランチでコミット First commit $ date “+%s.%N” > stamp $ git add stamp master $ git commit -m 'Add ns stamp' HEAD Update date.txt ns-stamp Add ns stamp 22
  • 23. 実際の例とレポジトリの動き (4) First commit ● master ブランチに戻る master ns-stamp Update date.txt $ git checkout master HEAD Add ns stamp (Working copy) ● コミット $ date > date.txt First commit $ git comit -av -m 'Update date, again.' Update date.txt ns-stamp HEAD Add ns stamp master Update date, again 23
  • 24. 実際の例とレポジトリの動き (5) First commit ● ns-stamp ブランチを マージ ns-stamp Update date.txt $ git merge ns-stamp Add ns stamp Update date, again Merge branch 'ns-stamp' master HEAD 24
  • 25. ブランチ(ラベル)は重要 ● ブランチのついていないコミットの枝は見え なくなる(そしてそのうちgcで回収される) ● マージや複数のレポジトリ連携でもブランチ を使って操作する ● 常にツリーの状態を意識(チェック)しよう – gitk --all – git log --graph 25
  • 29. Git の分散レポジトリ ● 各人がそれぞれ、(完全な)レポジトリと作業ツリーのセッ トを持つ ● システム的には中央は存在しない – でも概念的には作ってもいい – 実際のプロジェクト運営では作成する事が多い – その場合は作業ツリーを持たない特殊(bare)なレポジトリを作る といい ● 組織、運用に合わせて好きなように構成可能 ● レポジトリ間で足らないオブジェクトを送り合う ● 作業ツリーへの操作や反映は、各々で行う 29
  • 30. 自分のレポジトリと 作業ツリーの間で作業 Alice Rob Checkout Checkout WT Commit Repos WT Commit Repos 30
  • 31. それぞれのレポジトリ間でやりとり Joe WT Alice Repos WT Repos Rob WT Repos 31
  • 32. 中央にレポジトリを置く運用 Bare Repository Repos Alice Joe WT Rob WT Repos Repos WT Repos 32
  • 33. それぞれが公開用 レポジトリを持つ場合 Alice's public repo Joe's public repo Rob's public repo Repos Repos Repos Alice Joe WT Rob WT Repos Repos WT Repos 33
  • 34. マージ(pull)機構付きの特殊な 公開レポジトリ(githubなど) Alice's public repo Joe's public repo Rob's public repo Repos Repos Repos Alice Joe WT Rob WT Repos Repos WT Repos 34
  • 35. リモートレポジトリ連携 ● 単にお互いを比較して、存在しないオブジェクトを交換する ● 操作 – clone: レポジトリをコピーして新たなレポジトリを作成 – fetch: 相手のレポジトリから自分に無い部分を取得 – push: 自分のレポジトリから相手にオブジェクトを書き込み、相手の ブランチラベルを移動させる – pull: fetch + merge ● 外部レポジトリURLを名前(ラベル)を付けて管理 – 例: (URL=) http://github.com/sugi/btr-backup.git => (ラベル) github – 標準の参照先(clone元)はディフォルトでは origin と言う名前 35
  • 36. リモートブランチ ● 外部レポジトリとの連携のキモ ● 相手の持っているブランチが、単純に“リモートレポジトリ名/ ブランチ名”と言う名前のブランチに見える – "sfjp" という名前の付けられたリモート URL https://scm.users.sourceforge.jp/gitroot/sugi/try1 上の "dev" ブランチ → "sfjp/dev" (もしくは remotes/sfjp/dev) ● リモートブランチはラベルを直接動かせない (チェックアウトし た場合、HEAD はブランチではなくコミットを直接指す) ● コミットを追加する(その枝を伸ばす)時はリモートブランチを元 にローカルブランチを作る – 直接 push するならリモートと同名のブランチを作るとよい ● 例: git checkout -b dev origin/dev 36
  • 37. 実際の操作: リモート編 (1) ● リモートから clone $ git clone host2.example.com:git/try origin/master origin First commit First commit master Add README.txt Add README.txt master Makefie automation Makefie automation HEAD HEAD clone autoupdate origin/autoupdate 37
  • 38. 実際の操作: リモート編 (2) ● ローカルの master ブランチを変更 $ git commit -av -m 'Fix typo' origin/master origin First commit First commit Add README.txt Add README.txt master origin/autoupdate Makefie automation Makefie automation HEAD HEAD autoupdate master Fix typo 38
  • 39. 実際の操作: リモート編 (3) ● origin に push $ git push origin First commit First commit Add README.txt Add README.txt origin/autoupdate autoupdate Makefie automation Makefie automation HEAD master Fix typo Fix typo master origin/master push HEAD 39
  • 40. 実際の操作: リモート編 (4) ● リモートブランチを元にローカルブランチを 作成し、そこにカレントブランチを移動 $ git checkout -b autoupdate origin/autoupdate origin First commit First commit Add README.txt Add README.txt HEAD origin/autoupdate autoupdate autoupdate Makefie automation Makefie automation master Fix typo Fix typo master origin/master HEAD 40
  • 41. 実際の操作: リモート編 (5) ● ローカルでバグフィクスしてmasterにマージ $ git commit -av -m 'Fix automation bug' $ git checkout master $ git merge autoupdate origin First commit First commit Add README.txt Add README.txt origin/autoupdate autoupdate Makefie automation Makefie automation origin/master Fix typo Fix typo Fix automation bug master autoupdate HEAD master merge autoupdate HEAD 41
  • 42. 実際の操作: リモート編 (6) ● リモートの master が誰かに更新された origin First commit First commit Add README.txt Add README.txt origin/autoupdate autoupdate Makefie automation Makefie automation origin/master Fix typo Fix typo Fix automation bug autoupdate Add License file master master merge autoupdate HEAD HEAD 42
  • 43. 実際の操作: リモート編 (7) ● origin を pull (の fetch 部分の様子) $ git pull origin First commit First commit Add README.txt origin/autoupdate Add README.txt autoupdate Makefie automation Makefie automation Fix typo autoupdate origin/master Fix typo Fix automation bug pull Add License file (fetch) Add License file merge autoupdate master HEAD HEAD master 43
  • 44. 実際の操作: リモート編 (8) ● origin を pull (の merge 部分) $ git pull origin First commit First commit Add README.txt origin/autoupdate Add README.txt autoupdate Makefie automation Makefie automation Fix typo autoupdate origin/master Fix typo Fix automation bug Add License file Add License file HEAD master merge autoupdate master merge origin/master HEAD 44
  • 45. 実際の操作: リモート編 (9) ● origin に変更をふたたび push $ git push origin First commit First commit Add README.txt Add README.txt autoupdate origin/autoupdate Makefie automation Makefie automation Fix typo autoupdate Fix typo Fix automation bug Fix automation bug Add License file Add License file HEAD push merge autoupdate merge autoupdate master origin/master HEAD merge origin/master merge origin/master master 45
  • 46. Pushの補足と注意 ● 基本的に push する前に pull すること! ● 標準では HEAD の指しているブランチだけが相手に送られ、同名のリ モートブランチラベルを移動する – 送るブランチ、動かすブランチの都度指定は可能。設定変更して標準で送る物を 変更することもできる – push によって相手に新しいブランチを作成する事もできる (空のレポジトリに push する場合は指定が必須) ● Push 先が作業ツリーを持っている場合(bare でない場合)、標準では相手 の HEAD のさしているブランチは動かせない ● 相手のブランチを動かすには、"FastForward" である必要がある – FastForward = 前方向に動かすだけで新しい位置に行けること – マージの場合は、ちゃんとツリー上で繋がっている必要がある (手で同じ修正を 入れた場合はFast Forward にならない) ● 最初は相互に pull だけ使ったほうがわかりやすい 46
  • 47. レポジトリ間連携プロトコル ● アクセスプロトコルは色々 – ローカルファイルシステム (fsのアクセスコントロールに従う) – git オリジナルプロトコル (認証がないので基本 read-only) – ssh (ログイン先のアクセスコントロールに従う) – HTTP(S) (プロトコル2種類: smart, dumb. R/W 可) ● git URL の例 – (LocalFS) /home/sugi/works/git/try1 – (ssh) host2:works/git/try1 sugi@host2.jp:/gitroot/try1 – (git) git://host2.example.com/gitroot/try1 – (HTTP) https://scm.users.sourceforge.jp/gitroot/sugi/try1 47
  • 49. 鉄板の参考書籍: 入門Git ● 秀和システム ISBN:978-4798023809 ● 現在の Git の開発者/プロジェクトリーダ/メンテナである 濱野純 氏が書いた書籍 ● 題名と違い、ぜんぜん入門だけじゃない ● 設計理念から内部構造、具体的な操作と例、Tips、コミュニティ まですべて詰まってます 49
  • 50. 参考文書 ● man 7 gittutorial (日本語訳) http://www8.atwiki.jp/git_jp/pub/git-manual-jp/Documentation/gittutorial.html ● サルでもわかるGit入門 http://www.backlog.jp/git-guide/ ● A successful Git branching model (日本語訳) http://keijinsonyaban.blogspot.jp/2010/10/successful-git-branching-model.html ● Pro Git http://www8.atwiki.jp/git_jp/pub/git-manual-jp/Documentation/gittutorial.html ● Git Cheat Sheet https://na1.salesforce.com/help/doc/en/salesforce_git_developer_cheatsheet.pdf 50
  • 51. 設定など ● git config --global user.name "名前" git config --global user.email メールアドレス – この2つは必ず設定しておこう ● git config --global color.ui auto – これを設定しておくと、各種出力が色つきになって見やすい ● git config --global alias.st status git config --global alias.co checkout – よく使うコマンドは省略形のエイリアスを作っておくと楽になる 51
  • 52. 覚えておくと便利なサブコマンド等 ● reset: HEAD と HEAD が指しているブランチラベルを好きな場所 に移動する – --hard を付けると作業ツリーも更新する – git reset --hard だけなら現在の作業ツリーをリセット ● gui: tk 版 gui を起動する。Index の状態を表示/操作するには便利 ● mergetool: 衝突時に gui のマージツール (meld, qdiff3 など) を起動 してマージを行う。エディタで編集するよりこちらの方が楽な場合 も多い ● revert: 指定したコミットを反転したコミットを作成し、修正を打 ち消す ● commit には必ず -v をつけよう。ログ編集時に Diff が確認できる 52
  • 53. Git のホスティングサービス ● SourceForge.JP ● github.com ● Google Code ● SourceForget.net ● repo.or.cz ● 他にも海外にはたくさん 53