$30 off During Our Annual Pro Sale. View Details »

git-practice

 git-practice

git講習会で用いたスライド

Tomoki Sugiura

October 02, 2018
Tweet

More Decks by Tomoki Sugiura

Other Decks in Programming

Transcript

  1. Git Hands-on Presented by shanpu

  2. Topics 1. git clone でリモートのリポを複製する 2. git pull でリモートの変更を反映する 3.

    branch を切ってみる 4. conflict を起こす&解消する 5. pull request を送ってみる 6. 作業ブランチがベースブランチから離れてし まったときの対処法 7. GUIクライアントの紹介 2
  3. 始める前に… 3 KITnetの場合はプロキシを通す $ git config --global http.proxy http://proxy.cis.kit.ac.jp:8080 $

    git config --global https.proxy https://proxy.cis.kit.ac.jp:8080
  4. 1. git clone リモートのリポを複製しよう 4

  5. clone ◎ git cloneを入力することでリモートリポジトリを ローカル環境に複製することができる ◎ shanpuのリポジトリをクローンしてみよう 5 $ cd

    path/to/your/dir $ git clone https://github.com/chez-shanpu/git-practice.git $ cd git-practice/ $ ls -a
  6. 2. git pull リモートのリポの変更を 反映させよう 6

  7. fetch&merge ◎ fetch ◦ リモートリポジトリの変更をローカルリポジトリ (origin/master)へ 反映するコマンド ⇒ファイルは更新されない! ◎ merge

    ◦ fetchして反映した内容をローカル(master)に反映させる 7 $ git fetch origin master $ git merge origin/master
  8. pull ◎ 現在いるブランチへリモートの変更をマージして くれる ◎ つまりfetchとmergeを同時に行ってくれる ◎ それ以外の使い方をしてはいけない 8 #

    masterにいる場合リモートのmasterが反映される $ git pull
  9. 3. branch masterにコミットは許さない 9

  10. branch ◎ 一連のコミットに対して分岐をつくる ⇒これを「ブランチを切る」という ◎ ブランチを切り替えることをチェックアウト という ◎ ブランチの切り方は人それぞれ、組織それぞれ だが基本的にmasterで作業することはなく

    ブランチを切ってそこで作業する 10
  11. branch ◎ shanpuのリポからブランチを切ってみよう ◎ ブランチ名はpractice/{{ yourname }} 11 $ git

    branch practice/{{ yourname }} # branchを確認 $ git branch # チェックアウトしてリモートに反映 $ git checkout practice/{{ yourname }} $ git push origin practice/{{ yourname }}
  12. feature & fix ◎ masterから開発用ブランチdevelopを切るが基本的 にこれに直接コミットしない ◎ 機能単位ごとに次のようなブランチを切る ◦ feature/piyo

    : piyo機能を開発するブランチ ◦ fix/hoge : hogeバグを修正するブランチ ◎ それぞれdevelopにマージ ◦ チーム開発のときはpull requestを出して マージしてもらう 12
  13. git-flow ◎ “A successful Git branching model” というブランチ モデルを簡単に導入するためのプラグイン 13

  14. 4. conflict 困難を乗り越えることで人は成長 する 14

  15. What’s conflict? ◎ 編集の競合のこと ◎ merge操作で自動的に解消できない変更 ◎ コンフリクトが発生すると修正するまで他の操作 ができない ◎

    conflictすることは悪くない. 適切な対処をしよう 15
  16. Example 16

  17. Let’s make conflict 1. practice/{{ yourname }}ブランチから practice/{{ yourname }}-branchA

    を切る 2. {{ yourname }}.txtを作成して一行目に{{ yourname }}-Aを記入&コミッ ト 3. practice/{{ yourname }}ブランチから practice/{{ yourname }}-branchB を切る 4. {{ yourname }}.txtを作成して一行目に{{ yourname }}-Bを記入&コミッ ト 5. practice/{{ yourname }}ブランチにチェックアウト 6. practice/{{ yourname }}-Aをpractice/{{ yourname }}にマージ 7. practice/{{ yourname }}-Bをpractice/{{ yourname }}にマージ 8. ⇒ practice/{{ yourname }}-Bのマージ失敗,コンフリクト!! 17
  18. How to solve conflict ? case1 ◎ 手動で頑張る ◎ コンフリクトした箇所にマークが入るのでそれを

    見つけていい感じにする 18 <<<<< HEAD << {{ yourname }}-A ===== == {{ yourname }}-B >>>>> {{yourname}}- branchB >> {{ yourname }}-A {{ yourname }}-B
  19. How to solve conflict ? case2 ◎ どちらかに合わせる ◎ もう片方の変更は反映されない

    19 # 統合ブランチ(マージされる方)に合わせる $ git checkout --ours {{ yourname }}.txt # トピックブランチ(マージする方)に合わせる $ git checkout --theirs {{ yourname }}.txt
  20. How to solve conflict ? case3 ◎ 諦める(つらいときは逃げてもいいんだよ) ◎ 状況に応じてコマンドを選ぶ

    20 # conflict後に何もしていない場合 $ git merge --abort # conflictを修正しようと色々いじった後の場合 $ git reset --hard HEAD # commitまでしたけどやっぱりやめたい場合 $ git reset --hard ORIG_HEAD
  21. Let’s solve conflict ! ◎ 好きな方法でコンフリクトを解消&コミット, プッシュしよう ◎ 諦めることは許さない 21

  22. 5. pull request mergeする前に確認してもらう 22

  23. What’s pull request? ◎ 自分の作業内容を取り込んでくださいとお願いす ること ◎ ホスティングサービスの機能 ◦ gitの機能ではない

    ◎ 自分のブランチをプルリクを出してmasterに マージしてみよう 23
  24. 6. 作業ブランチがベースブランチか ら離れてしまったときの対処法 離れ離れになってもきっと大丈夫…! 24

  25. situation ◎ 機能hogeを実装するためにブランチを切ったけど, 気づいたら元のdevブランチの開発が進んでた… ◦ チーム開発ではよくある ◦ devの内容を取り込まないと機能hogeがちゃんと動くか わからない 25

    dev
  26. rebase ◎ 作業ブランチの分岐元をベースブランチの最新コ ミッ トに合わせること 26

  27. How to rebase? ◎ トピックブランチ(feature/hoge)にcheckoutしてい る状態で、統合 ブランチ(develop)を取り込む 27 $ git

    rebase develop
  28. How to solve conflict when you’re doing rebase ? ◎

    次の操作を繰り返す ◦ コンフリクトを解消 ◦ 解消したらcontinue 28 # conflictを解消 $ git add {{ conflicted file }} $ git rebase --continue
  29. rebase & pull request ◎ pull request を出す前にrebaseして最新の 統合ブラン チの変更に合わせる

    ◦ 最新の統合ブランチでも自分の実装した機能が動くこと を確認する ◎ mergeでいいのでは…? ◦ 個人開発ではそれでもいい ◦ ログが汚れるためOSS開発では忌避される ◦ チーム開発ではメンバー次第(僕はrebaseしてほしい) 29
  30. 7. GUIクライアント マウスでポチポチしたい人に向けて 30

  31. Why GUI ? ◎ コマンドのみだと疲れるしミスも出る ◎ 大事なのはプロダクト ◦ git芸人になりたいわけではない ◦

    ただコマンドを把握しておくことも大切 31
  32. How to chose ? ◎ 好きなものを使え! ◎ IDE標準搭載のやつでもいい 32

  33. Git Kraken ◎ 僕の推し(これしか使ったことない…) ◎ Windows, Mac, Linuxに対応 ◎ かっこいい

    ◎ コンフリクト解消のためのツールもなかなかいけてる ◎ 無料版と有料版がある 33
  34. 帰る前に… 34 プロキシ設定を解除 $ git config –global –unset http.proxy $

    git config –global –unset https.proxy
  35. ◎ 京都工芸繊維大学の技術者コミュニティ ◎ 活動内容はいろいろ,各自がやりたいことをやる ◎ Wiki等で知見の共有 ◎ 月一回例会あり ◦ LTしたり事務連絡したり

    ◎ 部費が0円になりました ◎ 申し込みは公式サイトへ ◦ https://aquatan.studio/ 35
  36. Thank you for listening! 36