こわくないプルリクPull Request is not afraid2013.06.14 - kanazawa.rb #10
Githubhttp://github.com
Pull Request
Pull Request
なにするもの?自分のコードを取り込んでもらう手続き
こわいの?迷惑をかける可能性があるのでちょっとびびる
こわいの?こわくはない(迷惑の中身を知れば)
Lets Start
ルール• 分岐元が同じブランチどうしで使える• 以上
Fork は?Fork は必須ではないむしろ一人でもできる
masterworkAAB1. checkout -b work2. commit
AABマージしてmasterwork1. checkout -b work2. commit
AABいいよB3. mergemasterwork1. checkout -b work2. commit
Shared Repository Model• 共用リポジトリで利用• Collaborators• Organizations
ABBA B4. pushA1. clone5. mergemasterwork2. checkout -b work3. commit
Fork & Pull Model• User 間で利用
A BA1. forkBA BA6. pullmasterworkmaster5. push2. clone3. checkout -b work4. commit
Send Pull Request
Send Pull Request
Send Pull Request
Send Pull Request
Receive Pull Request
Receive Pull Request
Merge Pull Request
Merge Pull Request
まったく簡単だ
迷惑パターン
迷惑パターン• Pull Request 後のコミット• コンフリクト• 大量のコミット
Pull Request 後のコミット• Pull Request の対象はブランチ• クローズ前に追加コミットすると• Pull Request の対象に含まれてしまう• Pull Request 先に Notification が飛ぶ• コー...
ABA B4. pushA1. clonemasterwork2. checkout -b work3. commit
ABA B4. pushA1. clonemasterwork2. checkout -b work3. commitCCDD5. commit 7. commit6. push 8. push
Pull Request 後のコミット• コードレビュー目的• まったく問題ない利用法• 別機能の開発目的• 問題のある(迷惑な)利用法• 別ブランチで作業をすることで解決
コンフリクト• 元ソースの変更に追従していないと発生する• こまめな pull & rebase で解決
ABXA B4. pushA1. clone5. mergemasterwork2. checkout -b work3. commitcommit
BmasterABXA6. push1. clone7. mergemasterwork2. checkout -b work3. commitBBX4. pullAcommitX5. rebase
A XA1. forkBA BA6. pullmasterworkmaster5. push2. clone3. checkout -b work4. commitcommit
B5. rebasemasterA XA1. forkBA XA8. pullmasterworkmaster7. push2. clone3. checkout -b work4. commitcommitBX5. pullB
B5. rebasemasterA XA1. forkBA XA8. pullmasterworkmaster7. push2. clone3. checkout -b work4. commitcommitBX5. pullB
Tips : Fork 元から pull1. git remote add upstream https://github.com/<org>/<rep>.git2. git checkout master3. git pull upstrea...
B5. rebasemasterA XA1. forkBA XA8. pullmasterworkmaster7. push2. clone3. checkout -b work4. commitcommitBX5. pullB
Tips : rebase ? merge ?• merge ではなく rebase• 後述のコミットの集約を実現するため• rebase 前にブランチを push していた場合• rebase 後に push する際は -f オプションが必要...
大量のコミット• コミット数が大量にある Pull Request• コーディング作業時に細かにコミットしていればよくある状況
A PA B4. pushA1. clone5. mergemasterwork2. checkout -b work3. commiiiiiiiiiiitsBBBBBBBBBBBBBBPBBBBBBBBBBBBBBBPPPPPPPPPPPPPPP
大量のコミット• Pull Request 先でのコミットログ肥大化• 差分を確認するのが困難になる• rebase -i で1コミットにまとめることで解決1. git checkout work2. git rebase -i master3...
AA5. pushA1. clone6. mergemasterwork3. commiiiiiiiiiiitsBPPPP2. checkout -b work4. rebase -i (squash)
Tips : Pull Request Branch• 作業用ブランチの履歴を残したい場合• Pull Request 専用ブランチを作成する1. git checkout work2. git checkout -b pr-work3. gi...
Conclusion• Pull Request は怖くない• 機能毎のブランチング• こまめな pull & rebase• コミットの集約(rebase -i)
Conclusion• Pull Request は怖くない• 機能毎のブランチング• こまめな pull & rebase• コミットの集約(rebase -i)"絶対" のルールはない(なにがおこるか把握して使えばよい)
まずは自分のリポジトリでブランチさえ切ればすぐ試せる!
Thank youTomokazu Kiyoharahttp://github.com/kiyoharahttp://facebook.com/tomokazu.kiyohara
Extra• http://blog.qnyp.com/2013/05/28/pull-request-for-github-beginners/• http://kik.xii.jp/archives/179• http://d.hatena...
Upcoming SlideShare
Loading in...5
×

こわくないプルリク

3,114

Published on

Github の Pull Request にフォーカスした Overview.
kanazawa.rb meetup 10 発表資料。

0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,114
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

こわくないプルリク

  1. 1. こわくないプルリクPull Request is not afraid2013.06.14 - kanazawa.rb #10
  2. 2. Githubhttp://github.com
  3. 3. Pull Request
  4. 4. Pull Request
  5. 5. なにするもの?自分のコードを取り込んでもらう手続き
  6. 6. こわいの?迷惑をかける可能性があるのでちょっとびびる
  7. 7. こわいの?こわくはない(迷惑の中身を知れば)
  8. 8. Lets Start
  9. 9. ルール• 分岐元が同じブランチどうしで使える• 以上
  10. 10. Fork は?Fork は必須ではないむしろ一人でもできる
  11. 11. masterworkAAB1. checkout -b work2. commit
  12. 12. AABマージしてmasterwork1. checkout -b work2. commit
  13. 13. AABいいよB3. mergemasterwork1. checkout -b work2. commit
  14. 14. Shared Repository Model• 共用リポジトリで利用• Collaborators• Organizations
  15. 15. ABBA B4. pushA1. clone5. mergemasterwork2. checkout -b work3. commit
  16. 16. Fork & Pull Model• User 間で利用
  17. 17. A BA1. forkBA BA6. pullmasterworkmaster5. push2. clone3. checkout -b work4. commit
  18. 18. Send Pull Request
  19. 19. Send Pull Request
  20. 20. Send Pull Request
  21. 21. Send Pull Request
  22. 22. Receive Pull Request
  23. 23. Receive Pull Request
  24. 24. Merge Pull Request
  25. 25. Merge Pull Request
  26. 26. まったく簡単だ
  27. 27. 迷惑パターン
  28. 28. 迷惑パターン• Pull Request 後のコミット• コンフリクト• 大量のコミット
  29. 29. Pull Request 後のコミット• Pull Request の対象はブランチ• クローズ前に追加コミットすると• Pull Request の対象に含まれてしまう• Pull Request 先に Notification が飛ぶ• コードレビュー&修正反映の用途に対応するため
  30. 30. ABA B4. pushA1. clonemasterwork2. checkout -b work3. commit
  31. 31. ABA B4. pushA1. clonemasterwork2. checkout -b work3. commitCCDD5. commit 7. commit6. push 8. push
  32. 32. Pull Request 後のコミット• コードレビュー目的• まったく問題ない利用法• 別機能の開発目的• 問題のある(迷惑な)利用法• 別ブランチで作業をすることで解決
  33. 33. コンフリクト• 元ソースの変更に追従していないと発生する• こまめな pull & rebase で解決
  34. 34. ABXA B4. pushA1. clone5. mergemasterwork2. checkout -b work3. commitcommit
  35. 35. BmasterABXA6. push1. clone7. mergemasterwork2. checkout -b work3. commitBBX4. pullAcommitX5. rebase
  36. 36. A XA1. forkBA BA6. pullmasterworkmaster5. push2. clone3. checkout -b work4. commitcommit
  37. 37. B5. rebasemasterA XA1. forkBA XA8. pullmasterworkmaster7. push2. clone3. checkout -b work4. commitcommitBX5. pullB
  38. 38. B5. rebasemasterA XA1. forkBA XA8. pullmasterworkmaster7. push2. clone3. checkout -b work4. commitcommitBX5. pullB
  39. 39. Tips : Fork 元から pull1. git remote add upstream https://github.com/<org>/<rep>.git2. git checkout master3. git pull upstream master
  40. 40. B5. rebasemasterA XA1. forkBA XA8. pullmasterworkmaster7. push2. clone3. checkout -b work4. commitcommitBX5. pullB
  41. 41. Tips : rebase ? merge ?• merge ではなく rebase• 後述のコミットの集約を実現するため• rebase 前にブランチを push していた場合• rebase 後に push する際は -f オプションが必要• rebase の功罪もあり merge 派もいる• コミットの集約はしない運用
  42. 42. 大量のコミット• コミット数が大量にある Pull Request• コーディング作業時に細かにコミットしていればよくある状況
  43. 43. A PA B4. pushA1. clone5. mergemasterwork2. checkout -b work3. commiiiiiiiiiiitsBBBBBBBBBBBBBBPBBBBBBBBBBBBBBBPPPPPPPPPPPPPPP
  44. 44. 大量のコミット• Pull Request 先でのコミットログ肥大化• 差分を確認するのが困難になる• rebase -i で1コミットにまとめることで解決1. git checkout work2. git rebase -i master3. pick, squash, squash, squash...
  45. 45. AA5. pushA1. clone6. mergemasterwork3. commiiiiiiiiiiitsBPPPP2. checkout -b work4. rebase -i (squash)
  46. 46. Tips : Pull Request Branch• 作業用ブランチの履歴を残したい場合• Pull Request 専用ブランチを作成する1. git checkout work2. git checkout -b pr-work3. git rebase -i master4. pick, squash, squash, squash...
  47. 47. Conclusion• Pull Request は怖くない• 機能毎のブランチング• こまめな pull & rebase• コミットの集約(rebase -i)
  48. 48. Conclusion• Pull Request は怖くない• 機能毎のブランチング• こまめな pull & rebase• コミットの集約(rebase -i)"絶対" のルールはない(なにがおこるか把握して使えばよい)
  49. 49. まずは自分のリポジトリでブランチさえ切ればすぐ試せる!
  50. 50. Thank youTomokazu Kiyoharahttp://github.com/kiyoharahttp://facebook.com/tomokazu.kiyohara
  51. 51. Extra• http://blog.qnyp.com/2013/05/28/pull-request-for-github-beginners/• http://kik.xii.jp/archives/179• http://d.hatena.ne.jp/hnw/20110528

×