• Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
484
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
2
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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