Git hands-on

2,135 views

Published on

身内でgitのハンズオンをやってみたので資料アップ。

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

No Downloads
Views
Total views
2,135
On SlideShare
0
From Embeds
0
Number of Embeds
875
Actions
Shares
0
Downloads
1
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Git hands-on

  1. 1. 手元で始めるgit - gitハンズオン -nato6933 0
  2. 2. gitとは バージョン管理システム。 SVN(Subversion)を反面教師として作られた。 テキストなら何でも管理できる(一応バイナリも管理できる)。 軽量、高速 Webホスティングサービス(github, Bitbucketなど)が複数存在。 1
  3. 3. スタート前に Linux/Macの人  git,gitkコマンドが入っているか? Windowsの人  …? 2
  4. 4. 言葉の意味 リポジトリ  gitで管理するファイルやディレクトリのまとまり。 branch(ブランチ)  リポジトリより小さな単位のファイルやディレクトリのひとまとまり。 tag(タグ)  特定のバージョンのスナップショット 3
  5. 5. 概念図リポジトリ feature tag名master release branch名 4
  6. 6. 基本的な使い方手元で始めるgit 5
  7. 7. gitの設定 git config --global user.name “nato6933” git config --global user.email nato6933@room6933.com  名前やアドレスはgithub上で開発者が問い合わせをしてきたりする時に 使われたりする。ソースコードに誰が改変を加えたのかもわかるように なっているので、実名が嫌な人はTwitterのアカウント名等を使った方が 良い。 git config --global color.ui “auto”  表示の色付けを自動設定する git config --global --list  確認 6
  8. 8. 初めてのリポジトリ git init 適当なファイルを作る git add . git commit -m “ログメッセージ” 7
  9. 9. git init 今いるディレクトリ(カレントディレクトリ)に.gitというディレ クトリを作る。そこにリポジトリの情報が入っていく。 カレントディレクトリで最初の1回しか実行しないコマンドなの で、「とりあえずプログラムを書く前に使う」と覚えておくだけで OK。いわゆるおまじない。 8
  10. 10. add(追加する)/commit(留める) git add foo.txt  (特定の or 全ての)ファイルをステージする。 git commit -m “ログメッセージ”  ステージされたファイルを実際に更新する。  ログメッセージは詳しく書こう。  fix bug、だけのログメッセージは意味がない。 旧foo.txt commit 新foo.txt 新foo.txt 更新される add (ログメッセージ) 新foo.txt 9
  11. 11. 基本の基本1. ファイルを作る/編集する2. git add .3. git commit4. 1に戻る 10
  12. 12. log git log  commitの履歴を見ることができる。 git log -1  前回のcommitのみをみる。数字の分だけログを見ることができる。commit 0f2e96938a2e64aa1ead685614d12468372fe9ac commit名Author: nato6933 <nato6933@room6933.com>Date: Wed Feb 29 13:57:32 2012 +0900 誰がcommitした? いつcommitした? first commit ログメッセージ ・commit名はそのリポジトリにおいて常にユニークな値を持つ。 (SHAというアルゴリズムによって自動的に付けられる。) 11
  13. 13. revert(戻る) git revert HEAD  最新のcommitを取り消して元に戻す。  元に戻したことも歴史としてlogに刻まれる。  ※HEADは最新のcommit名を表す git revert commit名  最新のcommit以外はcommit名を指定する。 12
  14. 14. branch(枝) git branch feature master  masterを元にしてfeatureというbranchを作る。 git branch  どんなbranchがあるか確認する。 git checkout feature  featureに移動する。 git checkout -b feature master  masterを元にfeatureを作成し、そのままfeatureに移動する。 git branch -d feature  branchの削除  当然だが気を付けて使うこと。 13
  15. 15. 簡単な実演1. git init 7. git add foo.txt2. vim foo.txt 8. git commit -m “second commit”3. git add foo.txt 9. git log4. git commit -m “first commit” 10. git revert HEAD5. git log 11. git log6. vim foo.txt 14
  16. 16. 実践手元で始めるgit 15
  17. 17. 実践の内容 branchとmerge 競合への対処 16
  18. 18. branch/mergeを使う実践 17
  19. 19. とりあえずHTMLファイルを追加git initしたら以下のHTMLファイルを追加。名前はhoge.html。 hoge.html <html> <head> <title>Hello git</title> </head> <body> <h1>Hello git!!</h1> </body> </html> 18
  20. 20. hoge.html追加後 git add hoge.html git status  現在のbranchの状態を確認してみる。 git commit -m “first commit” git branch feature master git checkout feature 19
  21. 21. 現在の状態リポジトリ featuremaster hoge.html 20
  22. 22. hoge.htmlを書き換え <html> <head> <title>Hello git</title> </head> <body> <h1>Hello git!!</h1> <ul> <li>Home</li> </ul> </body> </html> 21
  23. 23. 書き換え後 git status  statusが変わっているのを確認。 git add hoge.html git commit -m “add Home” git log  commitの確認 22
  24. 24. 現在の状態リポジトリ feature hoge.html hoge.html*master hoge.html 23
  25. 25. masterに戻って確認 git checkout master git log  master branchのログは1つしかない。 24
  26. 26. merge(結合、合体) git merge feature  featureでの変更がmasterにmergeされる。 git log  masterのlogが2つになっているはず。 25
  27. 27. 現在の状態リポジトリ feature hoge.html hoge.html*master hoge.html 26
  28. 28. mergeには3種類ある。 直接  git merge feature 圧縮(squash)  git merge --squash feature  commitを一つにまとめてmergeする。 チェリーピック  git cherry-pick commit名  特定のcommitだけを取ってきてmergeする。 27
  29. 29. 競合への対処実践 28
  30. 30. branchの追加と書き換え1. git checkout -b about master  masterからaboutというbranchを作っ <html> て、同時にaboutに移動する。 <head> <title>Hello git</title>2. hoge.html書き換え(1) </head> <body>3. git add hoge.html <h1>Hello git!!</h1> <ul>4. git commit -m”add Twitter” <li>Home</li>5. git branch about2 about <li>Twitter</li> ※(1) <li>Mail</li> ※(2)6. hoge.html書き換え(2) </ul> </body>7. git add hoge.html </html>8. git commit -m”add Mail” 29
  31. 31. 現在の状態リポジトリfeaturemaster hoge.html(1) hoge.html(2) about about2 30
  32. 32. about2のhoge.htmlを書き換え1. git checkout about2 <html>2. hoge.html書き換え <head> <title>Hello git</title>3. git add hoge.html </head> <body>4. git commit -m”add Research” <h1>Hello git!!</h1> <ul>5. git log <li>Home</li> <li>Twitter</li> <li>Researh</li> </ul> </body> </html> 31
  33. 33. 現在の状態リポジトリfeaturemaster hoge.html(1) hoge.html(2) about hoge.html(1)* about2 32
  34. 34. conflict(競合)1. git checkout about2. git merge about2 Auto-merging hoge.html CONFLICT (content): Merge conflict in hoge.html Automatic merge failed; fix conflicts and then commit the result.  hoge.htmlの中を覗いてみよう。 33
  35. 35. hoge.htmlの中を見てみる <html> <head> <title>Hello git</title> </head> <body> <h1>Hello git!!</h1> <ul> <li>Home</li> <li>Twitter</li> <<<<<<< HEAD <li>Mail</li> 競合箇所 ======= <li>Research</li> >>>>>>> about2 </ul> </body> </html> 34
  36. 36. 競合の解消<html> <html> <head> <head> <title>Hello git</title> <title>Hello git</title> </head> </head> <body> <body> <h1>Hello git!!</h1> <h1>Hello git!!</h1> <ul> <ul> <li>Home</li> <li>Home</li> <li>Twitter</li> <li>Twitter</li> <li>Mail</li> <li>Mail</li> <li>Research</li> </ul> </ul> </body> </body> </html></html> どちらも残す 片方だけ残す 35
  37. 37. 競合を解消したらcommit 競合を解消したらadd, commit  -m “ログメッセージ”は無くても良い。  gitが自動的にログメッセージを用意してくれる。  ログメッセージを書き換えたい場合にはつけても良い。 36
  38. 38. github手元で始めるgit 37
  39. 39. githubの内容 githubアカウントを作る 初めてのgithub  githubでリポジトリを作りbranchを追加する。 cloneとforkとpull request  githubでpull requestを送る、受け取る 38
  40. 40. githubとは ソースコードのホスティングサービスサイト。 gitを使ったコード管理がWeb上でできる。 多くのOSSが、githubを中央リポジトリとして使っている。 無料でアカウントを作ることができるが、パブリックなリポジトリ しか作れない。 お金を払えばプライベートなリポジトリも管理できる。 39
  41. 41. githubアカウントの作成github 40
  42. 42. githubのアカウントを作成 http://c-loft.com/blog/?p=1541  非常にわかりやすかったのでこちらに丸投げ。 sshのキーが必要です。 41
  43. 43. 初めてのgithubgithub 42
  44. 44. githubでリポジトリを作る github上で実演  New Repository  リポジトリ名とリポジトリの説明を入れる 以降、github上のリポジトリをリモートリポジトリ、手元の リポジトリをローカルリポジトリと呼ぶことにします。 43
  45. 45. ローカルリポジトリを作る・pushする1. git init2. touch README3. git add README4. git commit -m “first commit”5. git remote add origin git@github.com:nato6933/foo.git  originという名前のbranchとして登録する。6. git push origin master 44
  46. 46. 現在の状態例ローカルリポジトリ リモートリポジトリ originmaster master 45
  47. 47. github上のリポジトリにbranchを追加1. git checkout -b feature master2. vim hoge.txt3. git add .4. git commit -m”add hoge.txt”5. git push origin feature 46
  48. 48. 現在の状態例ローカルリポジトリ リモートリポジトリ originmaster master feature feature 47
  49. 49. cloneとforkとpullgithub 48
  50. 50. 言葉の意味 fork(フォーク)  元の開発者のリポジトリを自分のリモートリポジトリとしてコピーし て分岐させる。 clone(クローン)  まさにクローン。logやbranchを全てまるごとコピーしてリモートリ ポジトリからローカルリポジトリに持ってくる。 pull(プル、引っ張る)  他のリポジトリで加えられた変更を現在の自分のbranchにmergeす る。引っ張ってきて合体。 49
  51. 51. 2人一組になって下さい。 まずAさんがhogeというリポジトリを作ります。適当にファイルを追加して下さい。Bさん 1. github上でforkする。 2. forkしたリポジトリをリモートリポジトリとして追加する。 3. 手元で編集、add、commitする。 4. pushする。 5. github上でpull requestする。Aさん 1. pull request用のbranchを作ってそのbranchに移動します。 2. pull requestをしたBさんのリポジトリをpullします。 3. この状態で動作を確認します。 4. 問題がなければpull requestを受けたbranchをmergeします。 5. githubにpushして終了します。 50
  52. 52. Bさんの行動※github上でforkした後。 1. git clone git@github.com:accountB/hoge.git 2. vim foo.txt 3. git add . 4. git commit -m”edit foo.txt” 5. git push origin masterあとはgithub上でpull requestする。 51
  53. 53. 概念図(Bさん用) Aさんのアカウント Bさんのアカウント hoge ⑤pull request hoge ②fork ③clone ①push ④pushhoge hogeAさんの Bさんのローカルリポジトリ ローカルリポジトリ 52
  54. 54. Aさんの行動※pull requestをもらった後 1. git checkout -b pull-request 2. git pull git@github.com:accountB/hoge.git 3. 動作確認 4. git commit 5. git checkout master 6. git merge pull-request 7. git push origin master 53
  55. 55. 概念図(Aさん用) Aさんのアカウント Bさんのアカウント hoge ①pull request hoge ②pull ③pushhoge hogeAさんの Bさんのローカルリポジトリ ローカルリポジトリ 54
  56. 56. 今度はAさんとBさんを交代 別のリポジトリを作ってやってみる。 競合を発生させてみても良いかも。 55
  57. 57. 参考資料 基本的なコマンド  http://room6933.com/mymemo/git/git-index.html githubアカウントの作り方  http://c-loft.com/blog/?p=1541 gitチートシート日本語版  http://www.textdrop.net/doc/git-cheat-sheet-ja/ おすすめの本(入門git)  著者Travis Swicegood 翻訳 でびあんぐる  http://www.amazon.co.jp/dp/427406767X/ 無料で公開されている本(Pro Git)  http://progit.org/book/ 56
  58. 58. Thank you for listening. 57

×