SCMBC Git 資料  第二回 SCMBC Git 班
Git のリポジトリ    リポジトリ = データを貯めるところ    Git ではリポジトリがローカルにある        SVNではローカルにないことが多い        ローカルのリポジトリに対する操作は高速 (通信不要)    ...
多人数開発      SVNでは1リポジトリ複数ツ       リー                            Gitでは個人がリポジトリをSCMBC Git 資料                 持つ             ...
多人数開発    共有リポジトリに pull, push をする    共有リポジトリは複数ある場合も        CIサーバとステージング用と、、、    SCMBC Git 資料                   Figures ...
Git のオブジェクト    すべて Immutable        作成されたら破棄されないかぎり変更されない    Blob : ファイルの中身    Tree : ディレクトリ構成    Commit : コミット内容   ...
Blob オブジェクト    ファイルの中身だけを表す    ファイル名などは Tree オブジェクトが保持    Tree や Commit をまたいで参照される        このために Immutable になっている    差...
Tree オブジェクト    ディレクトリ構成を表す        子ファイル        子ディレクトリ    同一のオブジェクトは複数のツリーから参照される        ディスクの空間効率をよくするため    SCMBC Gi...
実ファイルと Git オブジェクト                                  850fc9..                                       Tree     /              ...
Commit オブジェクト    コミット(リビジョンの記録)        コミットした人、時間、メッセージ        親コミット        ルート Tree …    親コミット        通常ひとつ       ...
コミットメッセージ    普通にGitを使うとコミットメッセージは必須        空だとエラーになる    一行目に概要、二行目を空白にして、三行目以降に     詳細        色々なコマンド (主にログ系) がこのフォーマッ...
コミットの様子     /a              t      b            cSCMBC Git 資料
git init      /a               t       .git       b            c SCMBC Git 資料
git add .     /a              t       .git      b            c                                  /                         ...
git commit     /a              t       .git                                  A           Commit オブジェクトが作ら                 ...
edit a; git add a; git commit     /                                          新しいコミットオブa’a              t       .git       ...
a を t 配下に移動 (mv a t/a)     /               t       .git                                  A               Ba     b         ...
git add -A; git commit     /                                                    新しいコミットオブ               t       .git      ...
オブジェクトのハッシュ値    すべてのオブジェクトの SHA-1 ハッシュ    比較はすべてハッシュ値で行う    世界中で(事実上の)一意性が担保される        SVNなど連番リビジョン番号との違い        リポジト...
ブランチ   Commit オブジェクト(ハッシュ値)へのポインタ       作成、削除が高速   Commit オブジェクトの親コミットをたどることでブ    ランチが表現できる   ブランチの切り替え       重複しているオ...
ブランチの使い方   最初は master       git branch で作成       git checkout で移動   フィーチャブランチ(トピックブランチ)       機能ごとにブランチをきる       短命な...
ブランチのイメージba31c           23ca1                master                HEAD                    HEAD は現在のブランチを表す SCMBC Git 資料
git branch b                  bba31c           23ca1                master                HEAD SCMBC Git 資料
git checkout b                HEAD                  bba31c           23ca1                master SCMBC Git 資料
edit & git commit …                                 HEAD                                   b                         99214...
git checkout master                                   b                         99214   111115ba31c           23ca1       ...
edit; git commit                                   b                        99214    111115ba31c           23ca1          ...
git merge b                                  b                        99214   111115ba31c           23ca1                 ...
git reset --hard 23ca1                                   b                         99214   111115ba31c           23ca1    ...
git merge b                                             HEAD                                b            master           ...
git reset --hard 12bae                                   b                        99214    111115ba31c           23ca1    ...
ちょっと表記を変更                            b                     1      2A              B                     C          M      ...
git checkout b                            HEAD                             b                     1       2 A             B...
git rebase master                     1      2 A             B                                     HEAD                   ...
図が見にくいのでマージコミットを消す                     1      2A              B                                     HEAD                  ...
実はSVNでもやってた                    自分                   未コミッ                     トA              B                    C      D...
SVNでのUpdate時の競合の解決≒rebase                               自分                              未コミッA              B              ...
SVNでのUpdate時の競合の解決≒rebase                            自分A              B            E                   C   D   リポジト       ...
分散リポジトリの例   repository A     ba31c        23ca1                          git clone   repository B     ba31c        23ca1SC...
分散リポジトリの例   repository A     ba31c        23ca1   924c3   リポジトリはバラバラに成長するが、区別   できる   repository B     ba31c        23ca1 ...
git fetch origin   repository A     ba31c        23ca1   924c3       変更分だけ取得   repository B                   origin/maste...
git merge origin/master; git push   repository A     ba31c        23ca1    924c3   23ca1                           7128d  ...
さいごに    オブジェクトを理解し、    ブランチの考え方を理解し、    コミットグラフを頭に思い浮かべることができれば     勝てる       そうすればresetとかrebaseも理解しやすい       よ!みんなでres...
Upcoming SlideShare
Loading in...5
×

SCMBC Git入門セッション発表資料

9,924

Published on

Published in: Technology
1 Comment
23 Likes
Statistics
Notes
  • 17ページの図、/ から a' へ矢印が伸びてますが、正しくは t からです。Github に正しいバージョンをあげてあるので、そちらをどうぞ。

    https://github.com/kyonmm/SCMBootCamp
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
9,924
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
57
Comments
1
Likes
23
Embeds 0
No embeds

No notes for slide

Transcript of "SCMBC Git入門セッション発表資料"

  1. 1. SCMBC Git 資料 第二回 SCMBC Git 班
  2. 2. Git のリポジトリ リポジトリ = データを貯めるところ Git ではリポジトリがローカルにある  SVNではローカルにないことが多い  ローカルのリポジトリに対する操作は高速 (通信不要)  push, pull などを使って同期を取る (通信がここで発生) 手元のリポジトリではコンフリクトしない SCMBC Git 資料
  3. 3. 多人数開発  SVNでは1リポジトリ複数ツ リー  Gitでは個人がリポジトリをSCMBC Git 資料 持つ Figures from Pro Git http://progit.org/book/ja/ch5-1.html
  4. 4. 多人数開発 共有リポジトリに pull, push をする 共有リポジトリは複数ある場合も  CIサーバとステージング用と、、、 SCMBC Git 資料 Figures from Pro Git http://progit.org/book/ja/ch5-1.html
  5. 5. Git のオブジェクト すべて Immutable  作成されたら破棄されないかぎり変更されない Blob : ファイルの中身 Tree : ディレクトリ構成 Commit : コミット内容 (Tag) SCMBC Git 資料
  6. 6. Blob オブジェクト ファイルの中身だけを表す ファイル名などは Tree オブジェクトが保持 Tree や Commit をまたいで参照される  このために Immutable になっている 差分ではなく、スナップショット SCMBC Git 資料
  7. 7. Tree オブジェクト ディレクトリ構成を表す  子ファイル  子ディレクトリ 同一のオブジェクトは複数のツリーから参照される  ディスクの空間効率をよくするため SCMBC Git 資料
  8. 8. 実ファイルと Git オブジェクト 850fc9.. Tree / 100644 25b351.. a 25b351.. 40000 219852.. t 219852..a t Blob Tree 0010011010100 100644 989209.. 1 b 100755 1b0938.. b c 989209.. c 1b0938.. Blob Blob 1110010110110 1001010110010 1 1SCMBC Git 資料
  9. 9. Commit オブジェクト コミット(リビジョンの記録)  コミットした人、時間、メッセージ  親コミット  ルート Tree … 親コミット  通常ひとつ  マージした場合、複数  初回コミットにはない 親コミットを順にたどることで歴史がわかる SCMBC Git 資料
  10. 10. コミットメッセージ 普通にGitを使うとコミットメッセージは必須  空だとエラーになる 一行目に概要、二行目を空白にして、三行目以降に 詳細  色々なコマンド (主にログ系) がこのフォーマット前提  詳細が不要な時は一行目だけ SCMBC Git 資料
  11. 11. コミットの様子 /a t b cSCMBC Git 資料
  12. 12. git init /a t .git b c SCMBC Git 資料
  13. 13. git add . /a t .git b c / a t Tree オブジェクトや Blob オブジェクトが作ら れる b cSCMBC Git 資料
  14. 14. git commit /a t .git A Commit オブジェクトが作ら れる b c / a t b cSCMBC Git 資料
  15. 15. edit a; git add a; git commit / 新しいコミットオブa’a t .git ジェクト A B b c / / a a’ aを編集してa’にした t t以下はいじってないので b c そのままのものが使われ るSCMBC Git 資料
  16. 16. a を t 配下に移動 (mv a t/a) / t .git A Ba b c / / a a’ t b cSCMBC Git 資料
  17. 17. git add -A; git commit / 新しいコミットオブ t .git ジェクト A B Ca b c / / / a a’ t t Tree は変更された b c がSCMBC Git 資料 Blob はそのまま
  18. 18. オブジェクトのハッシュ値 すべてのオブジェクトの SHA-1 ハッシュ 比較はすべてハッシュ値で行う 世界中で(事実上の)一意性が担保される  SVNなど連番リビジョン番号との違い  リポジトリが分散しても安心(後述) リモートとの通信でもハッシュ値でオブジェクトに ついて判断できるので高速、低負荷 SCMBC Git 資料
  19. 19. ブランチ Commit オブジェクト(ハッシュ値)へのポインタ  作成、削除が高速 Commit オブジェクトの親コミットをたどることでブ ランチが表現できる ブランチの切り替え  重複しているオブジェクトをハッシュ値で区別 SCMBC Git 資料
  20. 20. ブランチの使い方 最初は master  git branch で作成  git checkout で移動 フィーチャブランチ(トピックブランチ)  機能ごとにブランチをきる  短命なブランチ さまざまなプラクティス  A successful Git branching model  英語: http://nvie.com/posts/a-successful-git-branching-model/  日本語:http://keijinsonyaban.blogspot.com/2010/10/successful-git-branching-model.html SCMBC Git 資料
  21. 21. ブランチのイメージba31c 23ca1 master HEAD HEAD は現在のブランチを表す SCMBC Git 資料
  22. 22. git branch b bba31c 23ca1 master HEAD SCMBC Git 資料
  23. 23. git checkout b HEAD bba31c 23ca1 master SCMBC Git 資料
  24. 24. edit & git commit … HEAD b 99214 111115ba31c 23ca1 master SCMBC Git 資料
  25. 25. git checkout master b 99214 111115ba31c 23ca1 master HEAD SCMBC Git 資料
  26. 26. edit; git commit b 99214 111115ba31c 23ca1 12bae master HEAD SCMBC Git 資料
  27. 27. git merge b b 99214 111115ba31c 23ca1 12bae ccb32 master HEAD 両方の変更点を問題ない形で持つ SCMBC Git 資料
  28. 28. git reset --hard 23ca1 b 99214 111115ba31c 23ca1 12bae ccb32 master HEAD SCMBC Git 資料
  29. 29. git merge b HEAD b master 99214 111115ba31c 23ca1 12bae ccb32 ブランチを移動するだけでマージ完了 →fast forward merge SCMBC Git 資料
  30. 30. git reset --hard 12bae b 99214 111115ba31c 23ca1 12bae ccb32 master HEAD SCMBC Git 資料
  31. 31. ちょっと表記を変更 b 1 2A B C M master HEADSCMBC Git 資料
  32. 32. git checkout b HEAD b 1 2 A B C M masterSCMBC Git 資料
  33. 33. git rebase master 1 2 A B HEAD C M b master 1’ 2’SCMBC Git 資料
  34. 34. 図が見にくいのでマージコミットを消す 1 2A B HEAD C b master 1’ 2’ fast forward merge可能!SCMBC Git 資料
  35. 35. 実はSVNでもやってた 自分 未コミッ トA B C D リポジト リ 競合が発生してコミットできない・・・SCMBC Git 資料
  36. 36. SVNでのUpdate時の競合の解決≒rebase 自分 未コミッA B ト C D リポジト リ 競合を解決・・・ここがrebaseっぽいSCMBC Git 資料
  37. 37. SVNでのUpdate時の競合の解決≒rebase 自分A B E C D リポジト リ そしてコミット!ただしこの作業はやり直し不SCMBC Git 資料
  38. 38. 分散リポジトリの例 repository A ba31c 23ca1 git clone repository B ba31c 23ca1SCMBC Git 資料
  39. 39. 分散リポジトリの例 repository A ba31c 23ca1 924c3 リポジトリはバラバラに成長するが、区別 できる repository B ba31c 23ca1 7128dSCMBC Git 資料
  40. 40. git fetch origin repository A ba31c 23ca1 924c3 変更分だけ取得 repository B origin/master 924c3 ba31c 23ca1 7128d masterSCMBC Git 資料
  41. 41. git merge origin/master; git push repository A ba31c 23ca1 924c3 23ca1 7128d 変更点を通知 repository B origin/master 924c3 ba31c 23ca1 23ca1 7128d masterSCMBC Git 資料
  42. 42. さいごに オブジェクトを理解し、 ブランチの考え方を理解し、 コミットグラフを頭に思い浮かべることができれば 勝てる そうすればresetとかrebaseも理解しやすい よ!みんなでreset/rebaseしまくろ う! SCMBC Git 資料
  1. Gostou de algum slide específico?

    Recortar slides é uma maneira fácil de colecionar informações para acessar mais tarde.

×