Your SlideShare is downloading. ×
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Git 道場 心:Git総論、心構え

979

Published on

0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
979
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
13
Comments
0
Likes
9
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 道場心:Git総論、心構え Nobuhiro Iwamatsu E-Mail: iwamatsu@nigauri.org Twitter: @iwamatsu
  • 2. 自己紹介● 岩松 信洋です。● Twitter は @iwamatsu です。● Gitによるバージョン管理 著者の一人です。● 普段はLinuxカーネルの開発とか、Debian とい うOSの開発をしています。● 師範らしいです。
  • 3. はじめに● ようこそ!Git道場へ。● 今日Git道場の門を叩いた方 ● 今のブームはGitらしい→使えるとモテるかも!? – 「彼がmergeやrebaseができなかった。別れたい。」 ● Subversion派やCVS派から足を洗いたいが、merge / rebase がよくわからない。 – Git道場は他の流派も受け入れる心が広い道場。
  • 4. はじめに● 講義・実技訓練の前に不安があるかも? ● 今までの知識で実技訓練に望めるのか? ● 俺はGit を選んでいいのだろうか....? – よいです。正解。大正解。● そんな方々に安心してGitを使えるように心構 えを簡単に説明します。
  • 5. Git は分散
  • 6. Gitは分散● Gitは中央管理用リポジトリを必要としない バージョン管理システム。分散バージョン管理 システム。● 今までは中央管理用リポジトリを必要とする Subversion などが主流だった。● Gitにはリモートリポジトリとローカルリポジ トリがある。
  • 7. 集中型の場合 リポジトリ ・コミット ・チェックアウト ・アップデート ・履歴の参照 ・履歴差分の確認ワーキングコピー ワーキングコピー
  • 8. 分散型(Git)の場合 リモートリポジトリ プル プッシュ コミット コミット ワーキングコピー ローカルリポジトリ ワーキングコピーチェックアウト チェックアウト ・履歴の参照 ・履歴差分の確認
  • 9. 分散型(Git)の場合 リモートリポジトリ プル プッシュ プル コミット コミット ワーキングコピー ローカルリポジトリ ワーキングコピーチェックアウト チェックアウト プル ・履歴の参照 ・履歴差分の確認
  • 10. 集中型の場合● ローカルリポジトリとリモートリポジトリの区 別がない。● リポジトリ ● 共有するバージョン管理用のデータが格納されてい る。 ● 履歴の参照、履歴差分の確認、コミットなどを行う 場合、リポジトリへアクセスが必要
  • 11. ● 分散型(Git)の場合● リモートリポジトリとローカルリポジトリがある。● 主な作業はローカルリポジトリで行う。 ● コミット、ブランチの作成、マージ etc... ● 自分に必要な管理データをローカルリポジトリで管理できる。 ● リモートリポジトリにアクセスできなくても作業ができる。 ● 必要なデータがローカルにあるので動作が早い。● プッシュでローカルリポジトリからリモートリポジトリに反映し て初めて、他のユーザと履歴共有する。
  • 12. ● リモートリポジトリ ● 共有するバージョン管理用のデータが格納されてい る。● ローカルリポジトリ ● リモートリポジトリのデータと自分の行ったバー ジョン管理用のデータが格納されている。● ローカルリポジトリは俺のもの、リモートリポ ジトリはみんなのもの。
  • 13. Gitで操作した時、各リポジトリが どのように変化するのか
  • 14. リモートリポジトリをクローンgit clone test.gitリモートリポジトリ(test.git) HEAD1 2 master
  • 15. リモートリポジトリをクローンgit clone test.git HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD master1 2 master 1 2 origin/master
  • 16. 変更してコミット(A)edit ; git commt -sm “Add commit A” HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD master1 2 master 1 2 origin/master
  • 17. 変更してコミット(A)edit ; git commt -sm “Add commit A” HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A master1 2 master 1 2 origin/master
  • 18. コミット2からtestブランチを 作成してチェックアウトgit checkout -b test commit-2 HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A master1 2 master 1 2 origin/master
  • 19. コミット2からtestブランチを 作成してチェックアウトgit checkout -b test commit-2 HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A master1 2 master 1 2 test origin/master
  • 20. 変更してコミット(B)edit ; git commit -am “Add commit B” HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A master1 2 master 1 2 test origin/master
  • 21. 変更してコミット(B)edit ; git commit -am “Add commit B” HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A master1 2 master 1 2 B test origin/master
  • 22. masterブランチをチェックアウトgit checkout master HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A master1 2 master 1 2 B test origin/master
  • 23. masterブランチをチェックアウトgit checkout master HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A master1 2 master 1 2 B test origin/master
  • 24. testブランチを削除git branch -D test HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A master1 2 master 1 2 B test origin/master
  • 25. testブランチを削除git branch -D test HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A master1 2 master 1 2 B origin/master
  • 26. 変更してコミット(C)edit ; git commit -am “Add commit C” HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A master1 2 master 1 2 B origin/master
  • 27. 変更してコミット(C)edit ; git commit -am “Add commit C” HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A C master1 2 master 1 2 B origin/master
  • 28. 作業している間に誰かコミットを プッシュした HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A C master1 2 master 1 2 B origin/master
  • 29. 作業している間に誰かコミットを プッシュした HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A C master1 2 3 master 1 2 B origin/master
  • 30. 作業している間に誰かコミットを プッシュした HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A C master1 2 3 master 1 2 B origin/master この後は どうするの?rebase ? merge? 小川師範の講義で説明します。
  • 31. Git は分散● コミットしてもローカルリポジトリにしか影響は ない。● プッシュするまでローカルリポジトリの情報はリ モートリポジトリに反映されない。● コミットしたからといって他の人に影響が出るわ けでもないので、気にせずにコミットしましょ う。● ローカルリポジトリは俺のもの、リモートリポジ トリはみんなのもの。
  • 32. Git は頑健
  • 33. Git は頑健● Gitは乱暴に言うとスナップショット。 ● コミットすると全体のツリー構造と内容を保存す る。● これらは SHA1 ハッシュで管理されている。 ● コミット ← ツリー構造 ← 実際のファイル – どれかが変更されると、ハッシュ値が変更される。
  • 34. コミット1 コミット :コミット T1 T :ツリー情報F1 T2 F :ファイル F2
  • 35. ディレクトリT2にFile3を作成し、 コミットする コミット1 T1F1 T2 F2
  • 36. ディレクトリT2にFile3を作成し、 コミットする コミット1 T1F1 T2 F2 F3
  • 37. ディレクトリT2にFile3を作成し、 コミットする コミット1 T1F1 T2 T2 F2 F3
  • 38. ディレクトリT2にFile3を作成し、 コミットする コミット1 T1 T1F1 T2 T2 F2 F3
  • 39. ディレクトリT2にFile3を作成し、 コミットする コミット1 コミット2 T1 T1F1 T2 T2 F2 F3
  • 40. File1を編集し、コミットする コミット1 コミット2 T1 T1F1 T2 T2 F2 F3
  • 41. File1を編集し、コミットする コミット1 コミット2 T1 T1F1 T2 T2 F1 F2 F3
  • 42. File1を編集し、コミットする コミット1 コミット2 T1 T1F1 T2 T2 F1 F2 F3
  • 43. File1を編集し、コミットする コミット1 コミット2 T1 T1 T1 T1F1 T2 T2 F1 F2 F3
  • 44. File1を編集し、コミットする コミット1 コミット2 コミット3 T1 T1 T1 T1F1 T2 T2 F1 F2 F3
  • 45. Git は頑健● Gitは乱暴に言うとスナップショット。 ● コミットすると全体のツリー構造と内容を保存す る。● これらは SHA1 ハッシュで管理されている。 ● コミット ← ツリー構造 ← 実際のファイル ● コミットは前のコミットのハッシュ値を持つ。 ● 最新のコミットのハッシュ値は、過去の履歴すべて のコミット、ツリー、ファイルのハッシュを確認し ていることになる。
  • 46. Git は頑健● 意図的に衝突を起こそうとしていない限り、正 しいコミットハッシュが分かれば、それはツ リーの構造、およびそのツリーに含まれている ファイルの中身のハッシュ、および過去からそ の状態に至るまですべての履歴の状態を反映し たハッシュ値になる。● ファイルの中身が一つでも違う値であれば異な るハッシュ値になる。
  • 47. Gitは時間的な変遷を管理する
  • 48. Gitは時間的な変遷を管理する● このコミットの前はどうなってのか● 前日のこの時間にした作業はどのような作業を 行なっていたのか● Gitはこれらを管理し、その状態に戻すことが できる。
  • 49. Gitは時間的な変遷を管理する● Gitの作業履歴が残っている。
  • 50. HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A master1 2 master 1 2 B test origin/master
  • 51. testブランチを削除git branch -D test HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A master1 2 master 1 2 B test origin/master
  • 52. testブランチを削除git branch -D test HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A master1 2 master 1 2 B origin/master
  • 53. 変更してコミット(C)edit ; git commit -am “Add commit C” HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A master1 2 master 1 2 B origin/master
  • 54. 変更してコミット(C)edit ; git commit -am “Add commit C” HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A C master1 2 master 1 2 B origin/master
  • 55. 変更してコミット(C)edit ; git commit -am “Add commit C” HEADリモートリポジトリ(test.git) ローカルリポジトリ HEAD A C master1 2 master 1 2 B origin/master やっぱりコミットBが必要だった....
  • 56. Gitは時間的な変遷を管理する● Gitの作業履歴が残っている。● git reflog で過去の作業履歴を参照できる。
  • 57. $ git reflog4341590 HEAD@{0}: commit: Commit-Ce6703af HEAD@{1}: checkout: moving from testto master1b3e6dc HEAD@{2}: commit: Commit-B5b2ff15 HEAD@{3}: checkout: moving frommaster to teste6703af HEAD@{4}: commit: Commit-A5b2ff15 HEAD@{5}: clone: from /tmp/test.git
  • 58. Gitは時間的な変遷を管理する● Gitの作業履歴が残っている。● git reflog で過去の作業履歴を参照できる。 ● ただし90日以内又はgit gcを実行しない/されない場合。 ● 不安ならGCを無効にする。 – git config --global gc.auto 0 ● 全てコミットしましょう。 – ローカルリポジトリ内で完結するので他の利用者には影響は ない。 – コミットしていれば救われる。
  • 59. まとめ● Gitは分散 ● 作業はローカルリポジトリで管理される。 ● リモートリポジトリへの影響はあまり気にしない。● Gitは頑健● Gitは時間的な変遷を管理する ● コミットしていれば、過去を取り戻せる(こともあ る)。 ● コミットしていれば、失敗は怖くない。
  • 60. 質問なにか質問はありますか?

×