Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Gitハンズオン研修 / Git Hands-on

Gitハンズオン研修 / Git Hands-on

新卒研修で行ったGit理解のためのハンズオン研修資料です。

資料中に出てくるマテリアルはこちら
https://github.com/BrainPad/GitForBeginners2020

BrainPad

July 14, 2020
Tweet

More Decks by BrainPad

Other Decks in Technology

Transcript

  1. 新卒社員研修
    株式会社ブレインパッド
    Gitハンズオン研修

    View Slide

  2. ©BrainPad Inc.
    GitHubにマテリアルはありますが、本資料の完全再現ができないことをご了承ください
    ● GitHub: https://github.com/BrainPad/GitForBeginners2020
    ● 研修では、社内で利用している
    Bitbucket (Gitホスティングサービス)やJIRA (チケット管理ツール)を使用したため、本資
    料の完全再現ができないことをご了承ください
    演習はグループワークで実施しました
    ● 実際に手を動かす演習では新卒
    5名 + TA1名のグループを作り、zoomのブレイクアウトセッションを用いた演習を行い
    ました
    ● この演習は非技術職の新卒にも参加してもらいました
    ● Gitの役割、使い方にフォーカスしてもらうため、
    日本語文章を編集対象としています
    前日に「Gitとは?」を教える講座がありました
    ● 本研修はday1の研修を踏まえて、演習を通し
    Gitへの理解をさらに深めることが目的
    注意事項
    2

    View Slide

  3. ©BrainPad Inc.
    1. グランドルール
    2. 本日の研修の課題 / 目的
    3. おさらい (day1の振り返り + ファイル修正の例)
    4. 課題紹介
    5. チュートリアル
    6. 課題1 (最低限のgitの使い方をマスター)
    7. コンフリクト/ チュートリアル2
    8. 課題2 (コンフリクトを理解)
    9. 最後に
    目次
    3

    View Slide

  4. ©BrainPad Inc.
    当日はブレイクアウトのチームごとにディレクトリ & チケットを用意しました
    4
    Bitbucket JIRAのチケット

    View Slide

  5. ©BrainPad Inc.
    1. グランドルール (5min)
    5

    View Slide

  6. ©BrainPad Inc.
    GitはCUI(コマンド)で実行
    ● 便利なGUIツール(sourcetree等)もありますが、今日はコマンドで実行してもらいます
    ● 付録でGUIツール例も紹介しました (本資料には未掲載)
    分かる人は周囲の人たちを助ける
    ● ブレイクアウト内外で困っている人がいたら助け合いましょう
    ● 仕事は one team で行うもの!
    グランドルール
    6

    View Slide

  7. ©BrainPad Inc.
    2. 本日の研修の課題 / 目的 (5min)
    7

    View Slide

  8. ©BrainPad Inc.
    本日の課題 / 目的
    8
    Gitを用いて間違いだらけの『我輩は猫である』をグループで正しく校正する
    課題
    Gitとは何かを理解する
    ● ソースコードなどの変更履歴を保存するツールであることを知る
    ● 各種Gitコマンドを利用し、Gitの操作ができる
    仕事でスムーズにGitを使えるようになる
    ● Gitの理解や反復練習を通じて実践経験を深める
    ● コンフリクトを理解し、自身で修正ができる
    目的

    View Slide

  9. ©BrainPad Inc.
    3. おさらい (day1の振り返り15min + ファイル修正の例15min)
    9

    View Slide

  10. ©BrainPad Inc. 10
    day1の振り返り(15min)
    ※ 前日に「gitとは?」を教える研修がありました

    View Slide

  11. ©BrainPad Inc.
    以下のキーワードを理解できれば
    OK
    ● バージョン管理
    ● リモート / ローカル
    ● ブランチ
    ● JIRAのチケットとの関連
    ● プルリクエスト
    ● コマンド(最低限): pull / checkout / add / commit / push
    day1の振り返りの目標
    11

    View Slide

  12. ©BrainPad Inc.
    振り返り1
    12

    View Slide

  13. ©BrainPad Inc.
    振り返り2
    13

    View Slide

  14. ©BrainPad Inc.
    model.py
    (gitで履歴管理)
    model_v1.py
    model_v1_add_visualize_by_alice.py
    model_v2_modified_by_bob.py
    model_v2_modified_by_bob_add_visualize.py
    model_final.py
    model_final_2.py
    model_submit_client.py
    Gitを使うとこんなことが避けられる
    14
    管理が難しい例 管理が簡単な例

    View Slide

  15. ©BrainPad Inc. 15
    ファイル修正の例(15min)

    View Slide

  16. ©BrainPad Inc.
    リモートとローカルの関係 (masterブランチのみを使用する場合)
    16
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    masterブランチで作業は
    本当はご法度

    View Slide

  17. ©BrainPad Inc.
    yさんローカル
    リモートとローカルの関係 (masterブランチのみを使用する場合)
    17
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    pull
    xさんローカル
    pull
    masterブランチで作業は
    本当はご法度

    View Slide

  18. ©BrainPad Inc.
    yさんローカル
    リモートとローカルの関係 (masterブランチのみを使用する場合)
    18
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Good bye
    World
    修正
    xさんローカル
    masterブランチで作業は
    本当はご法度
    pull
    pull

    View Slide

  19. ©BrainPad Inc.
    yさんローカル
    リモートとローカルの関係 (masterブランチのみを使用する場合)
    19
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Good bye
    World a.txtのHelloをGood byeに変更と
    いうことをステージング
    修正
    add
    xさんローカル
    masterブランチで作業は
    本当はご法度
    pull
    pull

    View Slide

  20. ©BrainPad Inc.
    yさんローカル
    リモートとローカルの関係 (masterブランチのみを使用する場合)
    20
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Good bye
    World a.txtのHelloをGood byeに変更と
    いうことをステージング
    修正
    add
    自分のmasterブランチに変更を
    適用したイメージ
    commit
    xさんローカル
    masterブランチで作業は
    本当はご法度
    pull
    pull

    View Slide

  21. ©BrainPad Inc.
    yさんローカル
    リモートとローカルの関係 (masterブランチのみを使用する場合)
    21
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Good bye
    World a.txtのHelloをGood byeに変更と
    いうことをステージング
    ローカルでの変更を
    リモートのmasterブランチに同期
    修正
    add
    自分のmasterブランチに変更を
    適用したイメージ
    commit
    Push
    xさんローカル
    yさんのPushに
    よって更新
    masterブランチで作業は
    本当はご法度
    pull
    pull
    リポジトリ
    a.txt
    Good bye
    World

    View Slide

  22. ©BrainPad Inc.
    yさんローカル
    リモートとローカルの関係 (masterブランチのみを使用する場合)
    22
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Good bye
    World a.txtのHelloをGood byeに変更と
    いうことをステージング
    修正
    add
    自分のmasterブランチに変更を
    適用したイメージ
    commit
    xさんローカル
    共有先のリモートのマスターを
    気軽に変更しても問題ない?
    yさんのPushに
    よって更新
    masterブランチで作業は
    本当はご法度
    pull
    pull Push
    リポジトリ
    a.txt
    Good bye
    World
    ローカルでの変更を
    リモートのmasterブランチに同期

    View Slide

  23. ©BrainPad Inc.
    yさんローカル
    リモートとローカルの関係 (masterブランチのみを使用する場合)
    23
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Good bye
    World a.txtのHelloをGood byeに変更と
    いうことをステージング
    修正
    add
    自分のmasterブランチに変更を
    適用したイメージ
    commit
    xさんローカル
    Masterブランチのみで作業することの問題 / 理想
    ● 問題:各自の変更分が強制的に
    masterを更新してしまう
    ● 理想:各自の変更分を一回別箇所で保存して、
    masterに変更を適用していいか決めたい
    解決策:ブランチ / プルリクエスト
    yさんのPushに
    よって更新
    masterブランチで作業は
    本当はご法度
    pull
    pull
    ローカルでの変更を
    リモートのmasterブランチに同期
    Push
    リポジトリ
    a.txt
    Good bye
    World

    View Slide

  24. ©BrainPad Inc.
    (重要) master pushはしない!!ブランチ切って作業しましょう。
    24
    ● リモート上の誰かの作業を上書きしてしまうため、この研修ではmaster pushはダメ*
    ● 上書きを防ぐためにもブランチを切って作業しましょう
    master pushはしない!!
    ブランチを切って作業する!!
    *個人作業ではmaster pushをしても良いですが、チーム作業時には避けることを推奨

    View Slide

  25. ©BrainPad Inc.
    (イメージ)リモートとローカルの関係 (ブランチ / プルリクエスト)
    25
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    master

    View Slide

  26. ©BrainPad Inc.
    (イメージ)リモートとローカルの関係 (ブランチ / プルリクエスト)
    26
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    master
    feature
    JIRAのチケットから
    ブランチを切る(推奨)

    View Slide

  27. ©BrainPad Inc.
    (イメージ)リモートとローカルの関係 (ブランチ / プルリクエスト)
    27
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    master
    feature
    リポジトリ
    a.txt
    Hello
    World
    xさんローカル
    feature
    (not master)
    pull

    View Slide

  28. ©BrainPad Inc.
    (イメージ)リモートとローカルの関係 (ブランチ / プルリクエスト)
    28
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    master
    feature
    a.txtのHelloをGood byeに変更と
    いうことをステージング
    修正
    add
    自分のfeatureブランチに変更分
    を適用したイメージ
    commit
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Good bye
    World
    xさんローカル pull
    feature
    (not master)

    View Slide

  29. ©BrainPad Inc.
    (イメージ)リモートとローカルの関係 (ブランチ / プルリクエスト)
    29
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    master
    feature
    a.txtのHelloをGood byeに変更と
    いうことをステージング
    修正
    add
    自分のfeatureブランチに変更分
    を適用したイメージ
    commit
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Good bye
    World
    xさんローカル pull
    Push
    リポジトリ
    a.txt
    Good Bye
    World
    ポイント
    masterではなく
      featureブランチが更新
    feature
    (not master)
    更新

    View Slide

  30. ©BrainPad Inc.
    (イメージ)リモートとローカルの関係 (ブランチ / プルリクエスト)
    30
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    master
    feature
    a.txtのHelloをGood byeに変更と
    いうことをステージング
    修正
    add
    自分のfeatureブランチに変更分
    を適用したイメージ
    commit
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Good bye
    World
    xさんローカル pull
    Push
    リポジトリ
    a.txt
    Good Bye
    World
    feature
    (not master)
    更新
    プルリクエスト
    ● featureブランチをmasterにマージしてもいいですか?
    ● この変更をmasterにも適用していいですか?

    View Slide

  31. ©BrainPad Inc.
    (イメージ)リモートとローカルの関係 (ブランチ / プルリクエスト)
    31
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Good bye
    World
    リポジトリ
    a.txt
    Hello
    World
    master
    feature
    a.txtのHelloをGood byeに変更と
    いうことをステージング
    修正
    add
    自分のfeatureブランチに変更分
    を適用したイメージ
    commit
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Good bye
    World
    xさんローカル pull
    Push
    リポジトリ
    a.txt
    Good Bye
    World
    feature
    (not master)
    更新
    プルリクエストが承認されると
    featureブランチの内容が
    masterブランチに反映される

    View Slide

  32. ©BrainPad Inc.
    1. 作業のためのブランチを切る
    2. ローカルで変更を行う
    ○ ファイル修正 / 新規ファイル追加 / 既存ファイル削除などを行う
    ○ 変更箇所を add / commit
    3. ローカルからリモートブランチにpushする
    4. プルリクエスト を作成し、変更箇所をmasterブランチに反映していいか検討する
    なんとなく理解しました?
    32

    View Slide

  33. ©BrainPad Inc.
    (イメージ)リモートとローカルの関係 (ブランチ / プルリク)
    33
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    master
    xさん作成プルリクエスト: a.txtの修正
    リポジトリ
    a.txt
    Hello
    World
    b.txt
    Attention is all you need
    実際の案件では、各自が担当している作業ごとにプルリクエストが出されます。
    ブランチ名
    feature_y_...
    ブランチ名
    feature_x_...
    リポジトリ
    a.txt
    Good Bye #変更
    World
    yさん作成プルリクエスト: b.txtの追加

    View Slide

  34. ©BrainPad Inc.
    Q1:ブランチはわざわざ JIRAのチケットから切らないといけないの?
    そういうわけではありません。
    ローカルで作成して、リモートに pushすればリモートにブランチが作成されます。
    しかし、どのタスクを担っているかの管理の面からもチケットから切ることを推奨します。
    Q2:ステージングって何?いきなりコミットすればいいじゃん?
    addされることで、「このファイルを gitの管理対象にします!」と宣言しているイメージです。
    反対にgitで管理が不要のファイルは addしなければ良いです。
    Q3:コミット / push はどの単位ですればいい? 1ファイルの1行でも変更したらコミット?
    諸々まとめて、コミット / pushしても構いません。
    大規模に変更されたプルリクエストですと、レビューが大変になってしまいます。
    タスクのまとまりを意識したプルリクエストを作成できるようになると良いです。
    経験が必要なところでもあるので、 Gitを使いながら「適度なまとまり」を把握していければ OKです。
    想定質問 & QAタイム
    34

    View Slide

  35. ©BrainPad Inc.
    4. 課題紹介 5min
    35

    View Slide

  36. ©BrainPad Inc. 36
    課題一覧:Tutorial 1 → 課題1 → Tutorial 2 → 課題2
    各問題を解く際にはブレイクアウトセッションを活用し、チームごとに作業をして頂きます。
    画面共有や雑談をしながら楽しく取り組んでください。
    チュートリアル2問 + 課題2問

    View Slide

  37. ©BrainPad Inc.
    班ごとに間違いだらけの『我輩は猫である』を校正してもらいます。
    課題紹介:間違いだらけの『我輩は猫である』をグループで校正してもらいます
    37
    ディレクトリ
    - グループごとに用意済
    - 他グループのdirを編集しないよう注意
    JIRA
    - 課題×グループ×member_idごとに準備
    我輩は犬である
    我輩は猫である

    View Slide

  38. ©BrainPad Inc.
    5. チュートリアル
    38

    View Slide

  39. ©BrainPad Inc.
    チュートリアル1
    39
    Tutorial 1(30 min + 解説)
    1. JIRAからブランチを切る
    2. tutorial_1_a.txt をローカル(作業環境)で修正してpush する
    3. Bitbucket上でプルリクエストを作成する
    4. メンバーがレビューし、問題がなければマージする (マージは一斉に行います )
    ファイルは、/tutorial/tutorial_1_a.txt です
    キーワード:ブランチ / プルリクエスト

    View Slide

  40. ©BrainPad Inc.
    1. JIRAのチケット(準備済)からブランチを切る
    2. リモートブランチの情報を取得 (pull)
    3. ローカルのブランチを切り替える (checkout)
    4. tutorial_1_a.txtを修正 (git status / diffを利用すると便利)
    5. 修正をadd / commit (分かりやすいコミットメッセージだと better)
    6. リモートブランチに同期させるために push
    7. Bitbucket上でプルリクエストを出す (レビュワーは班員 )
    8. お互いのプルリクエストを確認
    9. プルリクエストのみを masterにマージ
    10. リモートのmasterが更新されていることを目視
    11. リモートのmasterをローカルに同期する (fetch / pull)
    JIRAに紐づいたブランチを作成し、 tutorial_1_a.txtを修正しプルリクエストを出す。
    Tutorial 1:JIRAからブランチ + 修正 + プルリクエスト (20min)
    40
    tutorial_1_.txt
    我輩は犬である
    我輩は猫である
    ファイルは、/tutorial/tutorial_1_a.txt です。

    View Slide

  41. ©BrainPad Inc.
    (イメージ)リモートとローカルの関係 (ブランチ / プルリクエスト
    41
    リモート(全員の共有場所)
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Hello
    World
    master
    feature
    a.txtのHelloをGood byeに変更と
    いうことをステージング
    修正
    add
    自分のfeatureブランチに変更分
    を適用したイメージ
    commit
    リポジトリ
    a.txt
    Hello
    World
    リポジトリ
    a.txt
    Good bye
    World
    xさんローカル pull
    Push
    リポジトリ
    a.txt
    Good Bye
    World
    プルリクエスト
    ● featureブランチをmasterにマージしてもいいですか?
    ● この変更をmasterにも適用していいですか?
    feature
    (not master)
    更新
    再掲
    ここまでの作業を行う

    View Slide

  42. ©BrainPad Inc.
    ひとまず、デモとしてやってみます
    42
    ※ 講師が実際に作業する様子を画面で見せました

    View Slide

  43. ©BrainPad Inc.
    ● ファイルは、/tutorial/tutorial_1_a.txt です。
    ● プルリクエストについて
    ○ レビュアーは、グループメンバー + TA で行ってください
    ● 後ページに解説がありますので、見ても OKです
    ● 分かる人は困っている人を助けましょう!
    では どうぞ!!
    43
    (研修では)チケットは作成済みです !!
    tutorial_1_のチケットを使用してください

    View Slide

  44. ©BrainPad Inc.
    (1)JIRAのチケット(準備済み)からブランチを切る
    コマンド実行例(社内で利用しているbitbucketやJIRAを使用した例)
    44
    リポジトリの確認
    適切なブランチ名
    (何をするブランチか分かるのが
    better)

    View Slide

  45. ©BrainPad Inc.
    (2)リモートブランチの情報を取得 (pull)
    $git pull origin
    45
    コマンド実行例(社内で利用しているbitbucketやJIRAを使用した例)
    (3) ローカルのブランチを切り替える (checkout)
    $ git checkout
    ENGTRAIN-382-tutorial_sample ブランチに移動
    リモートブランチの情報をローカルブランチに持ってくる
    git branch で今いるブランチを確認
    fetchしてcheckoutでもok
    $ git fetch && git checkout ENGTRAIN-381-tutorial_sample
    masterで作業するのは避けましょう
    ● 1つの作業ブランチで、ひとまとまりのタスクとする
    ● プルリクエストで「masterにマージしてもいいですか?」というやり取り

    View Slide

  46. ©BrainPad Inc. 46
    どこを変更したか(差分)を確認するコマンド $ git diff
    tutorial_1_.txt を修正
    ファイルは、2020/git_handson/day2/group_/tutorial/ 以下にあります
    コマンド実行例(社内で利用しているbitbucketやJIRAを使用した例)
    (4)tutorial_1_.txtを修正
    git diffだけでも差分を確認できますが、
    差分のある全てのファイルが表示されます

    View Slide

  47. ©BrainPad Inc.
    (5) 修正をadd / commit (分かりやすいコミットメッセージだと better)
    47
    git status で 今のgitの情報を確認
    ● tutorial.txtの変更がaddされたことが確認できる
    ● こまめに打つことを推奨
    分かり易いコメントだとbetter
    参考:Gitのコミットメッセージの書き方
    tutorial.txtをadd
    $ git add
    $ git commit -m "コメント"
    コマンド実行例(社内で利用しているbitbucketやJIRAを使用した例)

    View Slide

  48. ©BrainPad Inc.
    (6) リモートブランチに同期させるために push
    $ git push origin
    48
    commitした内容を origin(リモート)の
    ENGTRAIN-382-tutorial_sample ブランチに同期
    (ローカルの変更をリモートにも適応している)
    コマンド実行例(社内で利用しているbitbucketやJIRAを使用した例)
    これで、ローカルでの変更分をリモートに反映させたイメージ
    (まだ、masterには反映されていない。リモートの作業ブランチが反映された。 )

    View Slide

  49. ©BrainPad Inc.
    (7) Bitbucket上でプルリクエストを出す (レビュアーはグループメンバー )
    49
    コマンド実行例(社内で利用しているbitbucketやJIRAを使用した例)

    View Slide

  50. ©BrainPad Inc.
    (7) Bitbucket上でプルリクエストを出す (レビュアーはグループメンバー )
    50
    分かりやすい説明
    (例えば、グラフの出力を行う場合はグ
    ラフなどを載せるとgood)
    レビュアーに
    班員+TAを追加
    コマンド実行例(社内で利用しているbitbucketやJIRAを使用した例)
    分かりやすいタイトル

    View Slide

  51. ©BrainPad Inc.
    (8) お互いのプルリクエストを確認
    51
    気になった点があればコメント
    (試しに書いてみましょう)
    コマンド実行例(社内で利用しているbitbucketやJIRAを使用した例)
    問題なければ承認を押す

    View Slide

  52. ©BrainPad Inc.
    (9) プルリクエストをmasterにマージ
    52
    後で煩雑にならないために
    作業していたリモートブランチを削除する
    誰がマージを行うかはプロジェクト次第
    プロジェクトごとに運用ルールを決めましょう

    ● 全員で確認してマージ
    ● PMがマージ
    避けたいこと
    ● 誰からもレビューを受けずに自分でマージ
    コマンド実行例(社内で利用しているbitbucketやJIRAを使用した例)

    View Slide

  53. ©BrainPad Inc.
    (10) リモートのmasterが更新されていることを確認
    53
    コマンド実行例(社内で利用しているbitbucketやJIRAを使用した例)

    View Slide

  54. ©BrainPad Inc.
    (11) ローカルのブランチを masterに移動してリモートの masterをローカルに同期する (fetch / pull)
    54
    実行前のmasterブランチのtutorial_1_a.txt:我輩は犬である
    実行後のmasterブランチのtutorial_1_a.txt:我輩は猫である
    コマンド実行例(社内で利用しているbitbucketやJIRAを使用した例)

    View Slide

  55. ©BrainPad Inc.
    6. 課題1 (30min)
    55

    View Slide

  56. ©BrainPad Inc. 56
    (余談)我輩は猫であるのオチご存知ですか!?
    知ってる or 知らない をチャットにコメント

    View Slide

  57. ©BrainPad Inc. 57
    (余談)なんと・・・
    ビール飲みすぎて、酔っ払って甕に落ちて死にます (悲)
    まるで、親指を立てながら溶鉱炉に沈んでいくシーンで有名な某映画のようですね (?)

    View Slide

  58. ©BrainPad Inc.
    課題1: (ファイルは、/task1/task1.txt です)
    58
    task1.txt task1.txtを分担して作業を行います
    a: 1-7行を修正
    b: 8-16行を修正
    c: 17-25行を修正
    d: 25-35行を修正
    e: review.txtを作成し、我輩は猫であるの感想文を書く
    (担当範囲は多少異なっていても問題ありません )
    (正確に直す必要もありません )
    (最後の1行がないのはわざとです。 dさん追記してください )
    参考: https://www.aozora.gr.jp/cards/000148/files/789_14547.html

    View Slide

  59. ©BrainPad Inc.
    7. コンフリクト
    59

    View Slide

  60. ©BrainPad Inc. 60
    コンフリクト 覚えてます?

    View Slide

  61. ©BrainPad Inc.
    みんなで同じ箇所を変更したらどうなる?
    61
    リモート(全員の共有場所)
    リポジトリ
    tutorial_2.txt
    我輩は猫である
    猫を適当な動物に変えてください

    View Slide

  62. ©BrainPad Inc. 62
    リモート(全員の共有場所)
    リポジトリ
    tutorial_2.txt
    我輩は犬である
    更新:プルリクエストのマージ
    みんなで同じ箇所を変更したらどうなる? 猫を適当な動物に変えてください
    修正
    リポジトリ
    tutorial_2.txt
    我輩は猫である
    リポジトリ
    tutorial_2.txt
    我輩は犬である
    pull add/ commit / push
    xさんローカル
    リポジトリ
    tutorial_2.txt
    我輩は犬である
    プルリクエストを出す
    プルリクエストが承認される
    リポジトリ
    tutorial_2.txt
    我輩は猫である
    更新

    View Slide

  63. ©BrainPad Inc.
    みんなで同じ箇所を変更したらどうなる?
    63
    リモート(全員の共有場所)
    リポジトリ
    tutorial_2.txt
    我輩は犬である
    リポジトリ
    tutorial_2.txt
    我輩は猫である
    修正
    リポジトリ
    tutorial_2.txt
    我輩は猫である
    リポジトリ
    tutorial_2.txt
    我輩は犬である
    pull add/ commit / push
    リポジトリ
    tutorial_2.txt
    我輩は犬である
    xさんローカル
    feature_x
    yさんローカル
    feature_y
    リポジトリ
    tutorial_2.txt
    我輩は猫である
    修正
    リポジトリ
    tutorial_2.txt
    我輩は猿である
    リポジトリ
    tutorial_2.txt
    我輩は猫である
    pull
    リポジトリ
    tutorial_2.txt
    我輩は猿である
    猫を適当な動物に変えてください
    プルリクエストを出す
    プルリクエストが承認される
    更新
    更新:プルリクエストのマージ
    add/ commit / push

    View Slide

  64. ©BrainPad Inc.
    みんなで同じ箇所を変更したらどうなる?
    64
    リモート(全員の共有場所)
    リポジトリ
    tutorial_2.txt
    我輩は犬である
    リポジトリ
    tutorial_2.txt
    我輩は猫である
    修正
    リポジトリ
    tutorial_2.txt
    我輩は猫である
    リポジトリ
    tutorial_2.txt
    我輩は犬である
    pull add/ commit / push
    リポジトリ
    tutorial_2.txt
    我輩は犬である
    xさんローカル
    feature_x
    yさんローカル
    feature_y
    リポジトリ
    tutorial_2.txt
    我輩は猫である
    修正
    リポジトリ
    tutorial_2.txt
    我輩は猿である
    リポジトリ
    tutorial_2.txt
    我輩は猫である
    pull
    リポジトリ
    tutorial_2.txt
    我輩は猿である
    猫を適当な動物に変えてください
    プルリクエストを出す
    プルリクエストが承認される
    更新
    更新:プルリクエストのマージ
    add/ commit / push
    変更済み箇所と同じ箇所の変更した
    プルリクエストを出すとどうなる?
    プルリクエストを出す

    View Slide

  65. ©BrainPad Inc.
    ブレイクアウト内で2人の代表者を選出してください (他メンバーは応援)
    Pullとブランチを切るタイミングは、 xさん・yさんが同時に行ってください
    やってみましょう(10min)
    65
    ● 上のページのxさんの役割です
    ● 準備済みのチケット
    「tutorial_2__x」からブ
    ランチを切ってください
    ● tutorial_2.txtの「猫」を「犬」に書き換
    えてプルリクエスト作成
    ● メンバー全員でプルリクエストを確認
    し、TAがマージ
    xさん
    ● 上のページのyさんの役割
    ● 準備済みのチケット
    「tutorial_2__y」からブラ
    ンチを切ってください
    ● Xさんのプルリクエストがマージ
    された後、tutorial_2.txtの「猫」を「猿」
    に書き換えてプルリクエスト作成
    yさん

    View Slide

  66. ©BrainPad Inc.
    怪しいプルリクエストが出てきますよね?
    66
    猫 → 猿 の変更をmasterに適用する
    プルリクエスト
    しかし、猫が既に変更されている
    コンフリクト

    View Slide

  67. ©BrainPad Inc.
    STEP1:最終的にどうするかを関係者と決める
    ● 犬? / 猿?
    ● はたまた「我輩は犬である。 (改行)我輩は猿である。」?
    STEP2:実際に直す
    今回は以下の方法を紹介
    ● ローカルで最新のmaster(正確にはマージ先ブランチ )をマージ
    ● git checkout master して git pullで最新版のmasterを取得
    ● git checkout で作業ブランチに移動
    ● git merge masterでmaster「を」作業ブランチ「に」 merge
    ● 目視で完成系に修正して commit -i or commit -m `コメント`してpush
    他にもrebaseを使ったコンフリクト解消などもあります。またBitbucket上でも修正できますが、今回は行いません。
    コンフリクト解消方法
    67

    View Slide

  68. ©BrainPad Inc.
    STEP1:最終的にどうするかを関係者と決める
    ● 犬? / 猿?
    ● はたまた「我輩は犬である。 (改行)我輩は猿である。」?
    STEP2:実際に直す
    今回は以下の方法を紹介
    ● ローカルで最新のmaster(正確にはマージ先ブランチ )をマージ
    ● git checkout master して git pullで最新版のmasterを取得
    ● git checkout で作業ブランチに移動
    ● git merge masterでmaster「を」作業ブランチ「に」 merge
    ● 目視で完成系に修正して commit -i or commit -m `コメント`してpush
    他にもrebaseを使ったコンフリクト解消などもあります。またBitbucket上でも修正できますが、今回は行いません。
    コンフリクト解消方法
    68
    チョットナニイッテルカワカラナイ だと
    思うのでやってみますね

    View Slide

  69. ©BrainPad Inc.
    今回は「我輩は猿である」にする
    では Yさん コンフリクト解消をやってみよう
    69

    View Slide

  70. ©BrainPad Inc.
    8. 課題2(コンフリクトを理解)
    70

    View Slide

  71. ©BrainPad Inc.
    コンフリクトを理解するために全員にコンフリクトを体験していただきます!
    71
    グループごとのディレクトリにある “task2/task.md” の内容に従って進めていきます
    ※課題を進める中で不明点がありましたら、チームメンバー・ TAと相談しましょう!
    1. 担当の修正箇所を決めてください
    2. “i_am_a_dog.txt”を修正しましょう
    3. Pull Requestを出しましょう
    4. TAがある操作を行います
    課題: 改変されている「吾輩は猫である」を正しく修正する
    5. コンフリクトを修正しましょう
    6. 再びTAがある操作を行います
    7. 再びコンフリクトを修正しましょう
    8. 各Pull Requestをmergeしましょう

    View Slide

  72. ©BrainPad Inc.
    課題2の補足
    72
    課題2ではTAが操作を行う箇所があります。
    TAは作業者が作成したPull Requestを必ずコンフリクトさせるような作業を行います。
    詳細はレポジトリ内の “task2/task.md” に記載しています。
    master
    作業者
    i_am_a_dog.txt
    の修正
    作業者
    ブランチの作成
    作業者
    Pull Requestの作成
    TA
    i_am_a_dog.txt
    の上書き
    TA
    masterブランチで作業
    コンフリクトの
    発生
    コンフリクトを発生させるイメージ

    View Slide

  73. ©BrainPad Inc.
    9. 最後に
    73

    View Slide

  74. ©BrainPad Inc.
    本日の課題 / 目的
    74
    Gitを用いて間違いだらけの『我輩は猫である』をグループで正しく校正する
    課題
    Gitとは何かを理解する
    ● ソースコードなどの変更履歴を保存するツールであることを知る
    ● 各種Gitコマンドを利用し、Gitの操作ができる
    仕事でスムーズにGitを使えるようになる
    ● Gitの理解や反復練習を通じて実践経験を深める
    ● コンフリクトを理解し、自身で修正ができる
    目的
    理解できましたか?

    View Slide

  75. 株式会社ブレインパッド
    〒108-0071 東京都港区白金台3-2-10 白金台ビル3F
    TEL:03-6721-7002 FAX:03-6721-7010
    www.brainpad.co.jp [email protected]
    本資料の著作権は、第三者に帰属する著作権を除き、本資料を作成した株式会社ブレインパッドに帰属します。当社の許可なく無断で、複製、改変・翻
    訳、販売等をすることはできません。ただし、本資料の閲覧者は、株式会社ブレインパッドの著作物である旨を表示し、かつ、非営利目的および本資料を
    改変しない場合に限り、本資料をダウンロード、プリントアウト、またはコピーし、自己のために閲覧・利用することができます。なお、著作権法上認められ
    ている範囲内での引用を行うことは可能です。本資料を引用するには、以下の条件を満たす必要がありますので、ご留意ください。 1.引用先と引用部
    分に主従関係があること 2.引用部分と本文が明確に区別できること 3.引用する必然性があり、その範囲についても必然性・合理性があること 4.
    出所を明示すること 5.部分的な改変などをせず、原文のまま引用すること

    View Slide