Git勉強会

1,414 views

Published on

  • Be the first to comment

Git勉強会

  1. 1. Git と仲良くするために 秘密結社 分散構成管理の杜 2013/11/18 masato-ka
  2. 2. この勉強会と資料について 目的は、Gitのコマンドをみんなで使って分散構成 管理ツールの使い方を体感することです。 すいません、資料は突貫工事で作っていますので 間違いや不備があるかもしれません。もし気付け ば教えて下さい。
  3. 3. 構成管理どうしてますか? ヒャッハー = 「フォルダ管理」 統率された社会 = Subversion, CVS, TFS 個を尊重する社会 = Git, Mercurial, Bazaar
  4. 4. 統率された社会 集中リポジトリ(Subversion) リポジトリ commit checkout/upd ate ワークコピー
  5. 5. 分散構成管理とは? 分散構成管理(git) push リポジトリ リポジトリ pull/clone ステージング ワークコピー
  6. 6. Gitを使おう 分散構成管理ツールのデファクトスタンダード Linuxのカーネルを管理するために開発された ネットワークが止まっても使えて便利とか行って るけど、大抵の人がGitHubが停止したら怒る。
  7. 7. おすすめ書籍 Git ポケットリファレンス
  8. 8. WindowsでGitを使うには? その昔WindowsでGitを使うのは大変でした。 (WinGM, Cygwin などの環境構築から)最近はワ ンクリックのインストーラがあるようです。
  9. 9. GitのいいGUIツールは? つべこべ言わずCUI使いやがれ! EclipseはEGitその他はSourceTreeやTortoiseGitなど ありますが、いまいち決定打はなさそうです。ま ずはコマンドラインに馴れてからGUIツールを探し てみましょう。
  10. 10. 使い始める前に Gitを設定しよう ユーザ名とメールアドレス >git config --global user.name “masato-ka” >git config –global user.email “mail@mail.com” .gitignore(無視リスト) *.jar *~ target/ !lib.jar
  11. 11. 手元でGitを使う方法 まずは一人でGitを使う手順です。練習してみま しょう。 1. 2. 3. 4. 5. リポジトリの作成(git init) 変更をステージングする(git add) ステージングの内容を確認する(git status) 変更をコミットする(git commit) コミット内容を確認する(git log)
  12. 12. リポジトリの作成 Gitで管理したいファイルがあるフォルダに移動し て「git init」を実行します。 >git init または >git init C:/workspace/SampleProject 「C:/workspace/SampleProject」をリポジ トリとして初期化する。以下のような メッセージが出ます。 Initialized empty Git repository in
  13. 13. コミットのための2段階 変更点をGitのリポジトリに入れるためにはステー ジングする必要がある。 新規追加ファイ ル 編集済みファイ ル git add 新規追加ファイ ル 編集済みファイ ル ステージング git commit ローカルリポジト リ
  14. 14. add ファイルを編集した内容をステージングエリアに 入れる 適当なファイルを編集してくださいその後、次のコ >git add [変更を記録したいファイルまたはフォ ルダ] マンドを実行 指定記法 意味 hogehoge.java hogehoge.java * 変更されたすべてのファイ ル src srcフォルダ *.java 変更されたjavaファイルす ※ *を使うとサブディレクトリも検索される。 べて ※ git resetでステージングエリアから削除できる。
  15. 15. status ステージングエリアの状態を表示させる。 >git status sample.txtを新規にステージングエリアに追加した状態が表 示される。
  16. 16. commit ステージングに変更を登録したあと、ローカルリ ポジトリに登録する。 >git commit –m “コミットコメント”
  17. 17. ブランチについて ブランチは作業をするために必要な物です。 Gitリポジトリはmasterというブランチが存在して います。 通常は他のリポジトリの同期をmasterで行うため、 他のブランチを作成して作業を行います。(master を汚さずに開発する。) Issueブランチや開発ブランチ、バグ修正ブランチ などの種類があります。(実際は同じブランチで す。)
  18. 18. ブランチを図示してみる head master a b e c d branch merge
  19. 19. git branch ブランチの一覧を表示させる。 >git branch * master アスタリスクが現在のブランチ master a head b
  20. 20. git checkout ブランチを作成する or 切り替える >git checkout -b topic >git branch -l master a head b *topic c >git checkout master >git branch -l *master a b topic c
  21. 21. 突然ですが総合演習1 masterへコミットしてください。 topicブランチに移動して3回コミットしてください。 それぞれ、ファイルの編集2回、フォルダの追加1回 です。
  22. 22. git merge [ブランチ名] 他のブランチの変更を取り込む >git checkout master >git merge topic *master a d b topic c h e f g もしも競合が発生した場合は競合を解消してコミットし てほしい
  23. 23. 競合 競合が発生した場合は >git status –s UU conflict.txt #競合が発生したファイル 競合したファイルを編集してaddする >git status –s M conflict.txt #競合が発生したファイル >git commit #競合解消時は自動でコミットコメント が入る
  24. 24. Fast-Forwardマージ mergeされるまでにmasterにコミットが無ければ masterのヘッドとブランチのヘッドが同じコミッ トを示す。 master topic *master a g b topic c e f g
  25. 25. git rebase master 分岐元ブランチの最新のコミットにつなぎ変える 。 *master a b g topic c e f >git rebase master #topic ブランチで実行 *master a b topic g c e f h >Fast-Forward マージ!< i j
  26. 26. つまりどういうことだってば よ! 競合解決を行うブランチを決めることができる 普通にmasterでマージ → masterで競合を解決 rebaseしてマージ → topicブランチで競合を解決
  27. 27. ブランチ生存戦略 よく使う(らしい)ブランチ 機能ブランチ トピックブランチ 開発ブランチ 安定ブランチ メンテナンスブランチ
  28. 28. 共有リポジトリを使ってみる 共有リポジトリの作成(git init) ローカルリポジトリの作成(git clone) 作業用ブランチの作成 (git branch) 共有リポジトリの変更を取り込む(git pull) ローカルリポジトリから共有リポジトリへ(git push)
  29. 29. 共有リポジトリの準備 今回は作りません。以下のgithubのリポジトリを使 います。 https://github.com/masato-ka/SampleProject.git
  30. 30. git clone [共有リポジトリのパ ス] 共有リポジトリからローカルリポジトリを作成す る リポジトリ リポジトリ >git clone https://github.com/masatoka/SampleProject.git リポジトリ リポジトリ
  31. 31. 作業用リポジトリを作成する masterブランチで直接作業すると、自分の変更 点と共有リポジトリにpushされた他人の変更点が ごっちゃになってしまう。そこで、自分の作業は 作業ブランチで行う。 共有リポジトリ *master a b clone *master a b c e f
  32. 32. git pull 共有リポジトリの変更をローカルリポジトリに取 り込む リポジトリ リポジトリ >git pull リポジトリ リポジトリ
  33. 33. 変更を取り込み後マージする 共有リポジトリから他の人の変更を取り込みマー ジする 共有リポジトリ *master a b g clone *master a pull b work c e f merge h conflict
  34. 34. git push 共有リポジトリからローカルリポジトリを作成す る リポジトリ リポジトリ >git push リポジトリ リポジトリ
  35. 35. 共有リポジトリへ反映 共有リポジトリへマージ結果を反映する 共有リポジトリ *master a b g h merge clone *master a pull b work c e f push h conflict
  36. 36. 作業ブランチを使って見やすく ローカルでコミットをまとめるため、履歴が追跡 しやすい 共有リポジトリ *master a b g clone *master a h pull b work push g c e h f コミットがま とめられて履 歴が汚れない merge --squash
  37. 37. ブランチをpushする。 ローカルリポジトリで作成したブランチはpushし なくては行けない。 >git push –u origin fix-branch
  38. 38. 総合演習2 一つのGitHubリポジトリをみんなで作業しましょ う。 皆さん自分の名前を作成してコミットしてくださ い。 5回以上編集を行ってください。 共有リポジトリにpushしてください。 となりの人と同じファイルを編集してコンフリク トを起こしましょう。 作業ブランチを使ってもかまいません。違いを確 認しましょう。
  39. 39. これまでのあらすじ ひょんなことからGitリポジトリを作ってしまった 俺たちは、お互いの存在をまだ知らない。 あの日作ったGitHubアカウントに僕たちはまだpushしてい ない
  40. 40. GitHub Gitのホスティングサービス Issueの管理機能(チケット) 他人のリポジトリをForkできる。 Pullリクエストと呼ばれる独特の仕組みがある。
  41. 41. GitHubを活用した開発 Forkとpullリクエストを活用 http://github.com/masato-ka/SampleProject /[yourname]/SampleProject fork リポジトリ リポジトリ pull request push pull clone local リポジトリ master Fix-branch 編集とリベー ス
  42. 42. 作業の流れ GitHubのWEB画面からfork フォークしたリポジトリをclone 作業用ブランチを作成し、作成したブランチで編 集 作業用ブランチをpush(git push –u origin fix-branch) Fork元のリポジトリ(upstream)からmasterに変更を 取り込む 作業ブランチをrebaseし自分のリポジトリにpush プルリクエスト送信
  43. 43. Fork Fork
  44. 44. git remote add clone元の以外のリポジトリを追加する。 >git remote add upstrema https://github.com/masato-ka/SampleProject 追加されたことを確認する。 >git remote -v
  45. 45. 総合演習 http://github.com/masato-ka/SampleProject をforkし て自分の名前のファイルを編集し、pullリクエスト を送ってください。
  46. 46. まとめ Gitを個人で使う Addしてcommit branch(ブランチでマージか?マスターでマージか?) 共有リポジトリで使う 基本はマージ masterを綺麗に使う方法 GitHub Forkとpullリクエスト

×