Movatterモバイル変換


[0]ホーム

URL:


PDF, PPTX3,126 views

Git overview (v 0.96)

Embed presentation

Download as PDF, PPTX
Git overview                 Version 0.96This 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                                blobcommit                                       blob                         treecommit     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 298e00bf81e1cb8f185bb0f3f3a7e36c4fe6de1eparent b94712703db282e8e227df510997c19ae0843f50author Alex Dunae <alex@dunae.ca> 1289601832 -0800committer Alex Dunae <alex@dunae.ca> 1289601832 -0800Update 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 .gitignore100644   blob   01c496d464df1deddb853119e8b61777e5703a67 CHANGELOG100644   blob   c5834ab3f785778b6ddd221c806ab1a3ba2045f7 LICENSE100644   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                CheckoutWT    Commit    Repos   WT   Commit     Repos                                                30
それぞれのレポジトリ間でやりとり                                 Joe                            WT        Alice                     Repos   WT    Repos                      Rob                 WT    Repos                                          31
中央にレポジトリを置く運用              Bare Repository                     Repos     Alice                           JoeWT                      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/tryorigin/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                        autoupdateautoupdate          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 automationorigin/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 automationorigin/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 autoupdateorigin/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 autoupdateorigin/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 fileHEAD                                          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

Recommended

PDF
C16 45分でわかるPostgreSQLの仕組み by 山田努
PDF
SystemV IPC
PDF
Git-dojo In Sendagaya.rb
PDF
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
PDF
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PDF
Node-v0.12の新機能について
PPTX
Stream2の基本
PDF
「今そこにある危機」を捉える ~ pg_stat_statements revisited
PDF
Tokyo.R#16 wdkz
PDF
Postgre sql9.3 newlockmode_and_etc
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PDF
OSS-DB Goldへの第一歩~実践!運用管理~
PDF
x86とコンテキストスイッチ
PDF
明日から使える気になるGo言語による並行処理
PDF
V6 unix in okinawa
PDF
OSC東京2013/Spring_JPUG資料
PDF
PostgreSQL安定運用のコツ2009 @hbstudy#5
PDF
Hackers Champloo 2016 postgresql-9.6
PDF
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
PDF
PostgreSQL Query Cache - "pqc"
PDF
仮想記憶入門 BSD-4.3を例題に
PDF
Gitを理解するためにおさえておきたい3つの図(工事中)
 
PDF
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
PDF
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
PDF
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PDF
Tutorial primaria
PDF
Archivo011
PDF
3 Dportfolio2
PDF
Archivo019

More Related Content

PDF
C16 45分でわかるPostgreSQLの仕組み by 山田努
PDF
SystemV IPC
PDF
Git-dojo In Sendagaya.rb
PDF
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
PDF
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PDF
Node-v0.12の新機能について
PPTX
Stream2の基本
C16 45分でわかるPostgreSQLの仕組み by 山田努
SystemV IPC
Git-dojo In Sendagaya.rb
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
Node-v0.12の新機能について
Stream2の基本

What's hot

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

Viewers also liked

PDF
Tutorial primaria
PDF
Archivo011
PDF
3 Dportfolio2
PDF
Archivo019
PDF
Archivo016
PDF
Archivo015
PDF
3 D Design Portfolio3
PDF
Archivo004
PDF
3 D Design Portfolio4
PDF
FLOSSとフリーカルチャーの流れ
PDF
Archivo024
PDF
Archivo013
PPTX
Portfolio
PDF
Técnicas de animación a la lectura
PDF
Archivo001
PDF
LA MATRIZ TIC HERRAMIENTA PARA PLANIFICAR EN INSTITUCIONES EDUCATIVAS
PPS
Vida de la virgen maria
Tutorial primaria
Archivo011
3 Dportfolio2
Archivo019
Archivo016
Archivo015
3 D Design Portfolio3
Archivo004
3 D Design Portfolio4
FLOSSとフリーカルチャーの流れ
Archivo024
Archivo013
Portfolio
Técnicas de animación a la lectura
Archivo001
LA MATRIZ TIC HERRAMIENTA PARA PLANIFICAR EN INSTITUCIONES EDUCATIVAS
Vida de la virgen maria

Similar to Git overview (v 0.96)

PDF
Git for beginners
PDF
15分でわかるGit入門
PDF
実践 Git - 低レベルに知る Git
PDF
Python for Data Analysis第1回勉強会(+git入門)
KEY
Git (実践入門編)
PPTX
Git勉強会
KEY
20120516 第7回ウフィカ社内ハンズオン Git基礎
PDF
Git勉強会
PDF
Git入門-概念編
PPT
SVN経験者のためのGIT入門
PDF
Gitを使ってみよう
KEY
20120324 git training
PDF
Gitのよく使うコマンド
PDF
Get along with Git
PDF
猫にはわからないGit講座
PDF
Git 道場 心:Git総論、心構え
PDF
Git勉強会 2016 Gitで卒論を管理しよう回
PDF
Gitの使い方あれこれ
KEY
一人でもはじめるGitでバージョン管理
PDF
図でわかるGit
 
Git for beginners
15分でわかるGit入門
実践 Git - 低レベルに知る Git
Python for Data Analysis第1回勉強会(+git入門)
Git (実践入門編)
Git勉強会
20120516 第7回ウフィカ社内ハンズオン Git基礎
Git勉強会
Git入門-概念編
SVN経験者のためのGIT入門
Gitを使ってみよう
20120324 git training
Gitのよく使うコマンド
Get along with Git
猫にはわからないGit講座
Git 道場 心:Git総論、心構え
Git勉強会 2016 Gitで卒論を管理しよう回
Gitの使い方あれこれ
一人でもはじめるGitでバージョン管理
図でわかるGit
 

Git overview (v 0.96)

  • 1.
    Git overview Version 0.96This 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
  • 7.
  • 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 blobcommit blob treecommit 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 オブジェクトtree298e00bf81e1cb8f185bb0f3f3a7e36c4fe6de1eparent b94712703db282e8e227df510997c19ae0843f50author Alex Dunae <alex@dunae.ca> 1289601832 -0800committer Alex Dunae <alex@dunae.ca> 1289601832 -0800Update 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 .gitignore100644 blob 01c496d464df1deddb853119e8b61777e5703a67 CHANGELOG100644 blob c5834ab3f785778b6ddd221c806ab1a3ba2045f7 LICENSE100644 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
  • 26.
  • 27.
  • 28.
  • 29.
    Git の分散レポジトリ● 各人がそれぞれ、(完全な)レポジトリと作業ツリーのセッ トを持つ● システム的には中央は存在しない – でも概念的には作ってもいい – 実際のプロジェクト運営では作成する事が多い – その場合は作業ツリーを持たない特殊(bare)なレポジトリを作る といい● 組織、運用に合わせて好きなように構成可能● レポジトリ間で足らないオブジェクトを送り合う● 作業ツリーへの操作や反映は、各々で行う 29
  • 30.
    自分のレポジトリと 作業ツリーの間で作業 Alice Rob Checkout CheckoutWT Commit Repos WT Commit Repos 30
  • 31.
    それぞれのレポジトリ間でやりとり Joe WT Alice Repos WT Repos Rob WT Repos 31
  • 32.
    中央にレポジトリを置く運用 Bare Repository Repos Alice JoeWT 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/tryorigin/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 autoupdateautoupdate 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 automationorigin/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 automationorigin/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 autoupdateorigin/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 autoupdateorigin/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 fileHEAD 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
  • 48.
  • 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

[8]ページ先頭

©2009-2025 Movatter.jp