Git

822 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
822
On SlideShare
0
From Embeds
0
Number of Embeds
294
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Git

  1. 1. Git の仕組み開発部てるー
  2. 2. 入門Git1. gitとは2. gitの基本概念3. インストールと初期構成4. 独りで使う5. 2か所で使う6. グループで使う7. ブランチを使った開発8. 分散環境とブランチとの関連9. 変更履歴を追いかける10. パッチ・べースのワークフロー11. ゴミファイルの無視12. 構成変数13. リモート・リポジトリ定義14. ファイル・アトリビュート15. 歴史の2分探索16. 間違いからの回復17. フック・メカニズム18. リポジトリの出版公開19. gitの周辺
  3. 3. アジェンダ1. Git って何?おいしいの?2. Git はオブジェクトの集合体で管理するよ!3. ブランチ / タグはただのポインタだよ!4. コミットは 3 層を意識しよう!5. merge! cherry-pick! rebase!
  4. 4. アジェンダ1. Git って何?おいしいの?2. Git はオブジェクトの集合体で管理するよ!3. ブランチ / タグはただのポインタだよ!4. コミットは 3 層を意識しよう!5. merge! cherry-pick! rebase!
  5. 5. Git とは?● オープンソースで開発されているバージョン管理システム● Linus Torvalds が Linux カーネルのソース管理のために開発を開始したツール● 種類はバージョン管理システムの分散型に含まれる
  6. 6. 集中型 (CVS, Subversion)リポジトリファイル・ディレクトリ群 ファイル・ディレクトリ群 ファイル・ディレクトリ群commitcommitcommitupdateupdateupdate
  7. 7. ローカルリポジトリ分散型 (Git)共用リポジトリファイル・ディレクトリ群 ファイル・ディレクトリ群 ファイル・ディレクトリ群commitcommitローカルリポジトリ ローカルリポジトリpushpushpushpullpullpullcommit
  8. 8. Subversion の作業例> svn update>> emacs test1.js> svn commit>> emacs test2.js> svn commit# リポジトリの修正をローカルのファイル・ディレクトリ群に反映# test1.js をエディタで修正# test1.js をリポジトリに反映# test2.js をエディタで修正# test2.js をリポジトリに反映
  9. 9. Git の作業例> git fetch> git merge origin/master>> emacs test1.js> git add test1.js> git commit>> emacs test2.js> git add test2.js> git commit>> git push# 共用リポジトリから修正差分を取得# ローカルリポジトリを作業ブランチにマージ# test1.js をエディタで修正# test1.js をコミット対象に指定# コミット対象のものをローカルリポジトリにコミット# test2.js をエディタで修正# test2.js をコミット対象に指定# コミット対象のものをローカルリポジトリににコミット# ローカルリポジトリの修正内容を共用リポジトリに反映
  10. 10. Git の作業例 (簡略化)> git pull>> emacs test1.js> git commit -a>> emacs test2.js> git commit -a>> git push# 共用リポジトリから修正差分を取得して、ローカルリポジトリを作業ブランチにマージ# test1.js をエディタで修正# 修正されたファイル群をローカルリポジトリにコミット# test2.js をエディタで修正# 修正されたファイル群をローカルリポジトリににコミット# ローカルリポジトリの修正内容を共用リポジトリに反映
  11. 11. 分散型の特長● ネットワークから分離されている環境でも、ローカルのリポジトリ中で仕事が続けられる● 他人に悪影響を及ぼすことを恐れずに、大規模な実験的な変更を自由に行ない、その途中経過を記録しておくことができる● まとまった変更がいったん完成した時点で、履歴を見なおして、適切な形に書き直してから公開することができる
  12. 12. アジェンダ1. Git って何?おいしいの?2. Git はオブジェクトの集合体で管理するよ!3. ブランチ / タグはただのポインタだよ!4. コミットは 3 層を意識しよう!5. merge! cherry-pick! rebase!
  13. 13. Git はオブジェクト● Git は「オブジェクト」と呼ばれるデータの集合体● オブジェクトの内容を基に生成されたハッシュをキーとした Key Value Storeで管理されている● .git/objects 下に格納されている
  14. 14. オブジェクトの構造オブジェクト名ヘッダ情報(型と長さ)オブジェクトの内容(型により異なる)SHA-1ハッシュ
  15. 15. 主なオブジェクトの種類● blob○ ファイルの中身を表す● tree○ ディレクトリの中身を表す● commit○ 修正差分を表す
  16. 16. blob オブジェクトの例bbc4538...blob 538#include <studio.h>int main(void) {printf("Hello World!");}
  17. 17. blob オブジェクトの例bbc4538...blob 538#include <studio.h>int main(void) {printf("Hello World!");}サイズ型
  18. 18. tree オブジェクトの例b1242d7...tree 224100644 bbc4538... README040000 428b354... lib100755 bfef14a5... start.js
  19. 19. tree オブジェクトの例b1242d7...tree 224100644 bbc4538... README040000 428b354... lib100755 bfef14a5... start.js型を表す オブジェクト名
  20. 20. ディレクトリ・ファイルの表現例出典:http://www.progit.org/book/ja/Git%E3%81%AE%E5%86%85%E5%81%B4-Git%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88
  21. 21. commit オブジェクトの例4bb4722...commit 424tree b1242d7...parent 1e26b18...author Teloocommitter Teloostart.js を修正
  22. 22. commit オブジェクトの例4bb4722...commit 424tree b1242d7...parent 1e26b18...author Teloocommitter Teloostart.js を修正ルートの tree オブジェクトを指す前の commit オブジェクトを指すこのcommit オブジェクトの作者を指すこの commit オブジェクトをコミットした方を指すコミットのコメント
  23. 23. parent があることで履歴ができるEA B Cparentparent parentDparentFparent
  24. 24. parent があることで履歴ができるEA B Cparentparent parentDparentFparent4bb4722...git checkout 4bb4722...
  25. 25. オブジェクト同士の参照 (1/3)1st commit treeblob"version1"test.txt
  26. 26. オブジェクト同士の参照 (2/3)2nd commit1st committreetreeblob"version1"test.txttest.txtblob"anotherfile"test2.txt
  27. 27. オブジェクト同士の参照 (3/3)3rd commit2nd commit1st committreetreetreeblob"version1"test.txttest.txtblob"anotherfile"test2.txtblob"version2"test.txttest2.txt
  28. 28. アジェンダ1. Git って何?おいしいの?2. Git はオブジェクトの集合体で管理するよ!3. ブランチ / タグはただのポインタだよ!4. コミットは 3 層を意識しよう!5. merge! cherry-pick! rebase!
  29. 29. 以降、矢印は進行方向を表すために逆で記載しますEA B C DF
  30. 30. Subversion のブランチ・タグはディレクトリ構造で表現する● trunk● branches○ v0.1● tags○ v0.1.0○ v0.1.1
  31. 31. Git のブランチ・タグはcommit オブジェクトへの参照EA B C DFv0.1masterv0.1.0v0.1.1
  32. 32. Git のブランチ・タグはcommit オブジェクトへの参照EA B C DFv0.1masterv0.1.0v0.1.1git checkout -b v0.1
  33. 33. .git/refs● .git/refs○ heads■ master■ v0.1○ tags■ v0.1.0■ v0.1.1○ ...1a469cb....git/refs/heads/v0.1
  34. 34. .git/refs● .git/refs○ heads■ master■ v0.1○ tags■ v0.1.0■ v0.1.1○ ...1a469cb....git/refs/heads/v0.1commit オブジェクトの名前
  35. 35. 各コマンド実行時の履歴の状態遷移(1/10)AmasterHEAD
  36. 36. 各コマンド実行時の履歴の状態遷移(2/10)A BmasterHEADgit commit
  37. 37. A BmasterHEADgit branch v0.1v0.1各コマンド実行時の履歴の状態遷移(3/10)
  38. 38. A BmasterHEADgit checkout v0.1v0.1各コマンド実行時の履歴の状態遷移(4/10)
  39. 39. EA BmasterHEADv0.1git commit各コマンド実行時の履歴の状態遷移(5/10)
  40. 40. EA BmasterHEADv0.1git tag v0.1.0各コマンド実行時の履歴の状態遷移(6/10)v0.1.0
  41. 41. EA BmasterHEADv0.1git commitF各コマンド実行時の履歴の状態遷移(7/10)v0.1.0
  42. 42. EA BmasterHEADv0.1git checkout masterF各コマンド実行時の履歴の状態遷移(8/10)v0.1.0
  43. 43. EA BmasterHEADv0.1git commitFC各コマンド実行時の履歴の状態遷移(9/10)v0.1.0
  44. 44. EA BmasterHEADv0.1git commitFC D各コマンド実行時の履歴の状態遷移(10/10)v0.1.0
  45. 45. アジェンダ1. Git って何?おいしいの?2. Git はオブジェクトの集合体で管理するよ!3. ブランチ / タグはただのポインタだよ!4. コミットは 3 層を意識しよう!5. merge! cherry-pick! rebase!
  46. 46. Subversion のコミットファイル・ディレクトリ群リポジトリcommit
  47. 47. Git のコミットローカルリポジトリワークツリーインデックスaddcommit
  48. 48. ワークツリー / インデックス / HEADの挙動例 (1/10)ワークツリー インデックス HEAD(ローカルリポジトリ)ABCABCABC
  49. 49. ワークツリー / インデックス / HEADの挙動例 (2/10)ワークツリー インデックス HEAD(ローカルリポジトリ)ABCABCABCemacs A.txt
  50. 50. ワークツリー / インデックス / HEADの挙動例 (3/10)ワークツリー インデックス HEAD(ローカルリポジトリ)ABCABCABCemacs B.txt
  51. 51. ワークツリー / インデックス / HEADの挙動例 (4/10)ワークツリー インデックス HEAD(ローカルリポジトリ)ABCABCABCgit add A.txt
  52. 52. ワークツリー / インデックス / HEADの挙動例 (5/10)ワークツリー インデックス HEAD(ローカルリポジトリ)ABCABCABCgit commit
  53. 53. ワークツリー / インデックス / HEADの挙動例 (6/10)ワークツリー インデックス HEAD(ローカルリポジトリ)ABCABCABCemacs C.txt
  54. 54. ワークツリー / インデックス / HEADの挙動例 (7/10)ワークツリー インデックス HEAD(ローカルリポジトリ)ABCABCABCgit add B.txt
  55. 55. ワークツリー / インデックス / HEADの挙動例 (8/10)ワークツリー インデックス HEAD(ローカルリポジトリ)ABCABCABCgit reset HEAD B.txt
  56. 56. ワークツリー / インデックス / HEADの挙動例 (9/10)ワークツリー インデックス HEAD(ローカルリポジトリ)ABCABCABCgit add C.txt
  57. 57. ワークツリー / インデックス / HEADの挙動例 (10/10)ワークツリー インデックス HEAD(ローカルリポジトリ)ABCABCABCgit commit
  58. 58. 3種類の diff● git diff○ インデックスとワークツリーの差分● git diff --cached○ HEAD とインデックスの差分● git diff HEAD○ HEAD とワークツリーの差分
  59. 59. アジェンダ1. Git って何?おいしいの?2. Git はオブジェクトの集合体で管理するよ!3. ブランチ / タグはただのポインタだよ!4. コミットは 3 層を意識しよう!5. merge! cherry-pick! rebase!
  60. 60. "git merge", "git cherry-pick","git rebase" の 3 つを下の図で説明しますA B CD Ev0.1masterHEAD
  61. 61. git merge
  62. 62. まずは「git merge」A B CD Ev0.1masterHEAD
  63. 63. 2 つの commit を parent とするcommit を作成しますA B CD Ev0.1masterHEADFgit merge v0.1
  64. 64. master で何も修正していない場合は?A BD Ev0.1masterHEAD
  65. 65. commit は作られず、移動するだけfast-forward と言うA BD Ev0.1masterHEADgit merge v0.1
  66. 66. git cherry-pick
  67. 67. 次は「git cherry-pick」A B CD Ev0.1masterHEAD
  68. 68. 特定の commit だけを取り込むことができますA B CD Ev0.1git cherry-pick DmasterHEADD
  69. 69. git rebase
  70. 70. 最後は「git rebase」A B CD Ev0.1masterHEAD
  71. 71. 元の commit はなくなって、master の後に移動するA B Cv0.1git rebase masterHEADEDmaster
  72. 72. master で fast-forward マージA B Cv0.1git checkout mastergit merge v0.1HEADEDmaster
  73. 73. お わ り

×