ハンズオン200階(カストロ、ヒソカレベル)
基本ルール● コミットのたびにオブジェクトの図をノートに書く● リポジトリの内部を見る
1. リポジトリの作成ハンズオン用のリポジトリ、作業ディレクトリを作成する$ mkdir hh_git$ cd hh_git$ git init
1. リポジトリの作成.git/ の中身を見る● objects/ は info/ と pack/ だけ● HEAD の中身が master になっている● refs/heads/ の中身が空● refs/tags/ の中身が空
2. READMEを作る空のファイルをコミットしてみる$ touch README$ git add README$ git commit -m "add README"
3. リポジトリの状態を見るまずはログを見る$ git logここでコミットのハッシュ値(sha-1)をメモる。
3. リポジトリの状態を見る1. commitオブジェクトの中身を見る$ git cat-file -p <sha-1>2. 更にtreeオブジェクトの中身を見る$ git cat-file -p <sha-1>3. .git/objects/...
3. リポジトリの状態を見る4. リポジトリの状態を図に書く (↓な感じの図をノートに書く)committreeblob5f97f 543b9 e69deblobのsha-1はファイル内容で決まるため、同じになるはずcommit, treeのs...
4. 別のファイルを作るその前に、一作業。masterブランチは邪魔なので、ブランチを外す。commitのsha-1をチェックアウトする。$ git checkout <sha-1>※ この資料だと 5f97f になるブランチを外した理由は後ほ...
4. 別のファイルを作る課題: 今日の勉強会の内容をメモに書く1. ファイルを作成し、add & commit をしてみる2. cat-file -pで先ほどと同じくノートに図を書く3. 今作成したファイルを更に編集し、 もう1回 add& c...
4. 別のファイルを作る5.図がこんな感じになる● e69de が同じオブジェクトを参照している66e825f97f 543b9 e69de8ed4f89c43976711b92be69dee69dee3cbdcommit, treeのsha-...
5. (無名)ブランチを作る1. READMEを作った<sha-1>をcheckoutする$ git checkout <sha-1>※ この資料だと 5f97f 。先ほど作成したファイルがディレクトリから消えればOK2. README を編集...
5. (無名)ブランチを作る3.図がこんな感じになる● gitは自然に分岐する66e825f97f 543b9 e69de8ed4f89c43976711b92be69dee69dee3cbdcommit, treeのsha-1は(ry5226...
6. マージコミットを作る今日の勉強会のメモを書いていたsha-1をマージする$ git merge --no-ff <sha-1>※ この資料だと 8ed4f
6. マージコミットを作る図がこんな感じになる● マージコミットは親が2つある● blobが上手くマージされている66e825f97f 543b9 e69de8ed4f 89c43976711b92be69dee69dee3cbdcommit,...
休憩: fast-forward図で分かるgit-mergeの--ff, --no-ff, --squashの違いhttp://d.hatena.ne.jp/sinsoku/20111025/1319497900
7. 手作りブランチ1. 現在のブランチの状況を見てみる$ git branch2. .git/refs/heads/master を見てみる$ cat .git/refs/heads/master
7. 手作りブランチ3. 勉強会のメモからブランチを作ってみる$ echo "<sha-1>" > .git/refs/heads/piyo※ この資料だと 8ed4f... の40桁4. 作成したブランチが表示される事を確認$ git bra...
7. 手作りブランチ6. .git/HEAD を見てみる=> ブランチに変わっている7. cherry-pickでREADMEの変更を取得してみる$ git cherry-pick <sha-1>※ この資料だと 5226d8. ノートに図を書...
7. 手作りブランチ図がこんな感じになる66e825f97f 543b9 e69de8ed4f 89c43976711b92be69dee69dee3cbdcommit, treeのsha-1は(ry5226ddc1f7 069315e5ded...
7. 手作りブランチ9. .git/refs/heads/piyo の中身を見てみるブランチをcheckout した状態でコミットするとsha-1が更新される
8. リモートの変更を取得する1. リモートにあるリポジトリから変更を取得してみる。$ git fetch git://github.com/sinsoku/banana※もし自分のリポジトリを持っていれば、そちらで試してもOK
8. リモートの変更を取得する2. コミットオブジェクトの有無を確認する。$ git show <sha-1>※ この資料だと 73c99リモートの変更が取得できている。ただ、この方法では<sha-1>が分からないとログを表示できない。
9. リモートに名前をつける1. URLに名前を付けることができる$ git remote add <name> <url>例:$ git remote add sinsoku git://github.com/sinsoku/banana
9. リモートに名前をつける2. リモートの変更を取得する$ git fetch sinsoku3. .git/refs/remotes/, .git/refs/tags/ を見てみる。4. git branch -a でブランチを表示するリモ...
9. リモートに名前をつける補足● リモートのタグも .git/refs/tags/ に入るため、ローカルとリモートのタグは混ざる● リモートのブランチの複製はfetchのタイミングで更新される(リモートが別の人に更新されても、ローカルに複製さ...
10. ブランチの履歴ブランチは更新履歴を持つ$ git reflog show piyo● rebaseやresetを使用した時に重宝する● 基本的に git gcが走るまでオブジェクトが消えたりしない
Upcoming SlideShare
Loading in …5
×

Git天空闘技場_ハンズオン

3,442 views

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,442
On SlideShare
0
From Embeds
0
Number of Embeds
2,536
Actions
Shares
0
Downloads
4
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Git天空闘技場_ハンズオン

  1. 1. ハンズオン200階(カストロ、ヒソカレベル)
  2. 2. 基本ルール● コミットのたびにオブジェクトの図をノートに書く● リポジトリの内部を見る
  3. 3. 1. リポジトリの作成ハンズオン用のリポジトリ、作業ディレクトリを作成する$ mkdir hh_git$ cd hh_git$ git init
  4. 4. 1. リポジトリの作成.git/ の中身を見る● objects/ は info/ と pack/ だけ● HEAD の中身が master になっている● refs/heads/ の中身が空● refs/tags/ の中身が空
  5. 5. 2. READMEを作る空のファイルをコミットしてみる$ touch README$ git add README$ git commit -m "add README"
  6. 6. 3. リポジトリの状態を見るまずはログを見る$ git logここでコミットのハッシュ値(sha-1)をメモる。
  7. 7. 3. リポジトリの状態を見る1. commitオブジェクトの中身を見る$ git cat-file -p <sha-1>2. 更にtreeオブジェクトの中身を見る$ git cat-file -p <sha-1>3. .git/objects/ の中身を見る
  8. 8. 3. リポジトリの状態を見る4. リポジトリの状態を図に書く (↓な感じの図をノートに書く)committreeblob5f97f 543b9 e69deblobのsha-1はファイル内容で決まるため、同じになるはずcommit, treeのsha-1は環境によって変わる
  9. 9. 4. 別のファイルを作るその前に、一作業。masterブランチは邪魔なので、ブランチを外す。commitのsha-1をチェックアウトする。$ git checkout <sha-1>※ この資料だと 5f97f になるブランチを外した理由は後ほど説明。
  10. 10. 4. 別のファイルを作る課題: 今日の勉強会の内容をメモに書く1. ファイルを作成し、add & commit をしてみる2. cat-file -pで先ほどと同じくノートに図を書く3. 今作成したファイルを更に編集し、 もう1回 add& commit をする。4. cat-file -p で同じくノートに図を書く。
  11. 11. 4. 別のファイルを作る5.図がこんな感じになる● e69de が同じオブジェクトを参照している66e825f97f 543b9 e69de8ed4f89c43976711b92be69dee69dee3cbdcommit, treeのsha-1は環境によって変わる
  12. 12. 5. (無名)ブランチを作る1. READMEを作った<sha-1>をcheckoutする$ git checkout <sha-1>※ この資料だと 5f97f 。先ほど作成したファイルがディレクトリから消えればOK2. README を編集して、commit & 図を書く
  13. 13. 5. (無名)ブランチを作る3.図がこんな感じになる● gitは自然に分岐する66e825f97f 543b9 e69de8ed4f89c43976711b92be69dee69dee3cbdcommit, treeのsha-1は(ry5226ddc1f7 06931
  14. 14. 6. マージコミットを作る今日の勉強会のメモを書いていたsha-1をマージする$ git merge --no-ff <sha-1>※ この資料だと 8ed4f
  15. 15. 6. マージコミットを作る図がこんな感じになる● マージコミットは親が2つある● blobが上手くマージされている66e825f97f 543b9 e69de8ed4f 89c43976711b92be69dee69dee3cbdcommit, treeのsha-1は(ry5226ddc1f7 069315e5dedc1f797671bce2d
  16. 16. 休憩: fast-forward図で分かるgit-mergeの--ff, --no-ff, --squashの違いhttp://d.hatena.ne.jp/sinsoku/20111025/1319497900
  17. 17. 7. 手作りブランチ1. 現在のブランチの状況を見てみる$ git branch2. .git/refs/heads/master を見てみる$ cat .git/refs/heads/master
  18. 18. 7. 手作りブランチ3. 勉強会のメモからブランチを作ってみる$ echo "<sha-1>" > .git/refs/heads/piyo※ この資料だと 8ed4f... の40桁4. 作成したブランチが表示される事を確認$ git branch5. チェックアウトしてみる$ git checkout piyo
  19. 19. 7. 手作りブランチ6. .git/HEAD を見てみる=> ブランチに変わっている7. cherry-pickでREADMEの変更を取得してみる$ git cherry-pick <sha-1>※ この資料だと 5226d8. ノートに図を書いてみる
  20. 20. 7. 手作りブランチ図がこんな感じになる66e825f97f 543b9 e69de8ed4f 89c43976711b92be69dee69dee3cbdcommit, treeのsha-1は(ry5226ddc1f7 069315e5dedc1f797671bce2d.........
  21. 21. 7. 手作りブランチ9. .git/refs/heads/piyo の中身を見てみるブランチをcheckout した状態でコミットするとsha-1が更新される
  22. 22. 8. リモートの変更を取得する1. リモートにあるリポジトリから変更を取得してみる。$ git fetch git://github.com/sinsoku/banana※もし自分のリポジトリを持っていれば、そちらで試してもOK
  23. 23. 8. リモートの変更を取得する2. コミットオブジェクトの有無を確認する。$ git show <sha-1>※ この資料だと 73c99リモートの変更が取得できている。ただ、この方法では<sha-1>が分からないとログを表示できない。
  24. 24. 9. リモートに名前をつける1. URLに名前を付けることができる$ git remote add <name> <url>例:$ git remote add sinsoku git://github.com/sinsoku/banana
  25. 25. 9. リモートに名前をつける2. リモートの変更を取得する$ git fetch sinsoku3. .git/refs/remotes/, .git/refs/tags/ を見てみる。4. git branch -a でブランチを表示するリモートリポジトリのブランチがローカルに複製されている事が確認できる
  26. 26. 9. リモートに名前をつける補足● リモートのタグも .git/refs/tags/ に入るため、ローカルとリモートのタグは混ざる● リモートのブランチの複製はfetchのタイミングで更新される(リモートが別の人に更新されても、ローカルに複製されたブランチは古いまま)● git clone <url> は git init の後に、git remote addorigin <url> している事と同じ
  27. 27. 10. ブランチの履歴ブランチは更新履歴を持つ$ git reflog show piyo● rebaseやresetを使用した時に重宝する● 基本的に git gcが走るまでオブジェクトが消えたりしない

×