wayfarer 0.4.1 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (676) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +10 -0
  3. data/Gemfile.lock +15 -11
  4. data/docs/cookbook/batch_routing.md +22 -0
  5. data/docs/cookbook/consent_screen.md +36 -0
  6. data/docs/cookbook/executing_javascript.md +41 -0
  7. data/docs/cookbook/navigation.md +43 -0
  8. data/docs/cookbook/querying_html.md +3 -3
  9. data/docs/cookbook/screenshots.md +2 -2
  10. data/docs/guides/callbacks.md +5 -5
  11. data/docs/guides/debugging.md +17 -0
  12. data/docs/guides/error_handling.md +22 -26
  13. data/docs/guides/jobs.md +44 -18
  14. data/docs/guides/navigation.md +73 -0
  15. data/docs/guides/{browser_automation → networking}/capybara.md +9 -4
  16. data/docs/guides/{browser_automation → networking}/custom_adapters.md +0 -0
  17. data/docs/guides/{browser_automation → networking}/ferrum.md +3 -1
  18. data/docs/guides/networking/http.md +33 -0
  19. data/docs/guides/{browser_automation → networking}/selenium.md +4 -2
  20. data/docs/guides/pages.md +4 -4
  21. data/docs/guides/performance.md +108 -0
  22. data/docs/guides/reliability.md +41 -0
  23. data/docs/guides/routing/steering.md +30 -0
  24. data/docs/guides/tasks.md +9 -33
  25. data/docs/reference/api/base.md +13 -127
  26. data/docs/reference/api/route.md +1 -1
  27. data/docs/reference/cli.md +0 -78
  28. data/docs/reference/configuration_keys.md +1 -1
  29. data/lib/wayfarer/base.rb +37 -27
  30. data/lib/wayfarer/cli/base.rb +19 -1
  31. data/lib/wayfarer/cli/job.rb +5 -11
  32. data/lib/wayfarer/cli/route.rb +4 -2
  33. data/lib/wayfarer/cli/templates/job.rb.tt +3 -1
  34. data/lib/wayfarer/config/networking.rb +1 -1
  35. data/lib/wayfarer/config/struct.rb +1 -1
  36. data/lib/wayfarer/gc.rb +3 -4
  37. data/lib/wayfarer/handler.rb +15 -0
  38. data/lib/wayfarer/middleware/base.rb +19 -0
  39. data/lib/wayfarer/middleware/chain.rb +8 -0
  40. data/lib/wayfarer/middleware/controller.rb +40 -0
  41. data/lib/wayfarer/middleware/dedup.rb +5 -0
  42. data/lib/wayfarer/middleware/dispatch.rb +22 -0
  43. data/lib/wayfarer/middleware/fetch.rb +33 -13
  44. data/lib/wayfarer/middleware/lazy.rb +11 -0
  45. data/lib/wayfarer/middleware/normalize.rb +2 -0
  46. data/lib/wayfarer/middleware/router.rb +41 -3
  47. data/lib/wayfarer/middleware/stage.rb +6 -2
  48. data/lib/wayfarer/networking/context.rb +1 -0
  49. data/lib/wayfarer/networking/ferrum.rb +1 -0
  50. data/lib/wayfarer/networking/follow.rb +22 -0
  51. data/lib/wayfarer/networking/pool.rb +9 -8
  52. data/lib/wayfarer/networking/result.rb +0 -8
  53. data/lib/wayfarer/page.rb +1 -1
  54. data/lib/wayfarer/routing/matchers/custom.rb +2 -0
  55. data/lib/wayfarer/routing/matchers/host.rb +3 -1
  56. data/lib/wayfarer/routing/matchers/path.rb +2 -1
  57. data/lib/wayfarer/routing/result.rb +0 -5
  58. data/lib/wayfarer/routing/route.rb +6 -0
  59. data/lib/wayfarer/routing/router.rb +28 -0
  60. data/lib/wayfarer/serializer.rb +2 -2
  61. data/lib/wayfarer/stringify.rb +13 -7
  62. data/lib/wayfarer/task.rb +4 -2
  63. data/lib/wayfarer.rb +2 -7
  64. data/spec/base_spec.rb +33 -42
  65. data/spec/callbacks_spec.rb +2 -2
  66. data/spec/cli/job_spec.rb +9 -5
  67. data/spec/config/networking_spec.rb +2 -2
  68. data/spec/factories/{queue/middleware.rb → middleware.rb} +3 -3
  69. data/spec/factories/{queue/page.rb → page.rb} +3 -3
  70. data/spec/factories/{queue/task.rb → task.rb} +0 -0
  71. data/spec/fixtures/dummy_job.rb +1 -1
  72. data/spec/gc_spec.rb +5 -9
  73. data/spec/handler_spec.rb +11 -0
  74. data/spec/integration/callbacks_spec.rb +85 -0
  75. data/spec/integration/page_spec.rb +62 -0
  76. data/spec/integration/params_spec.rb +56 -0
  77. data/spec/integration/stage_spec.rb +51 -0
  78. data/spec/integration/steering_spec.rb +57 -0
  79. data/spec/middleware/chain_spec.rb +32 -19
  80. data/spec/middleware/controller_spec.rb +86 -0
  81. data/spec/middleware/dedup_spec.rb +20 -8
  82. data/spec/middleware/dispatch_spec.rb +43 -0
  83. data/spec/middleware/fetch_spec.rb +116 -45
  84. data/spec/middleware/normalize_spec.rb +5 -4
  85. data/spec/middleware/router_spec.rb +80 -28
  86. data/spec/middleware/stage_spec.rb +42 -19
  87. data/spec/networking/follow_spec.rb +41 -0
  88. data/spec/routing/router_spec.rb +24 -0
  89. data/spec/spec_helpers.rb +11 -3
  90. data/spec/support/static/git-scm.com/assets/application-38b0d42ff05ffea45841edebbd14b75b89585646153808e82907c2c5c11f324b.js +772 -0
  91. data/spec/support/static/git-scm.com/assets/application-cafcf280f67db0e6d8168ba98a38da878769a9d5f37793b68ffb963a02d185e0.css +1 -0
  92. data/spec/support/static/git-scm.com/assets/modernize-b3ebe0c31c24f230dc62179d3e1030d2e57a53b1668d9382c0a27dbd44a94beb.js +20 -0
  93. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Bash.html +751 -0
  94. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-PowerShell.html +804 -0
  95. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Sublime-Text.html +728 -0
  96. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Visual-Studio-Code.html +751 -0
  97. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Visual-Studio.html +740 -0
  98. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Zsh.html +765 -0
  99. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces.html +931 -0
  100. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Summary.html +702 -0
  101. data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-Command-line-Git.html +720 -0
  102. data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-Dulwich.html +746 -0
  103. data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-JGit.html +889 -0
  104. data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-Libgit2.html +1003 -0
  105. data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-go-git.html +792 -0
  106. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Administration.html +745 -0
  107. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Basic-Snapshotting.html +840 -0
  108. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Branching-and-Merging.html +829 -0
  109. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Debugging.html +731 -0
  110. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Email.html +766 -0
  111. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-External-Systems.html +721 -0
  112. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Getting-and-Creating-Projects.html +746 -0
  113. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Inspection-and-Comparison.html +735 -0
  114. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Patching.html +742 -0
  115. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Plumbing-Commands.html +715 -0
  116. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Setup-and-Config.html +863 -0
  117. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Sharing-and-Updating-Projects.html +802 -0
  118. data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-An-Example-Git-Enforced-Policy.html +1200 -0
  119. data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-Git-Attributes.html +1134 -0
  120. data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-Git-Configuration.html +1315 -0
  121. data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-Git-Hooks.html +876 -0
  122. data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-Summary.html +704 -0
  123. data/spec/support/static/git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project.html +1667 -0
  124. data/spec/support/static/git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows.html +859 -0
  125. data/spec/support/static/git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project.html +1354 -0
  126. data/spec/support/static/git-scm.com/book/en/v2/Distributed-Git-Summary.html +704 -0
  127. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-A-Short-History-of-Git.html +735 -0
  128. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-About-Version-Control.html +783 -0
  129. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup.html +889 -0
  130. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-Getting-Help.html +750 -0
  131. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-Installing-Git.html +879 -0
  132. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-Summary.html +704 -0
  133. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-The-Command-Line.html +711 -0
  134. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-What-is-Git?.html +857 -0
  135. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository.html +816 -0
  136. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Git-Aliases.html +775 -0
  137. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository.html +1432 -0
  138. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Summary.html +703 -0
  139. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Tagging.html +1049 -0
  140. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Undoing-Things.html +998 -0
  141. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History.html +1172 -0
  142. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes.html +983 -0
  143. data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging.html +1102 -0
  144. data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Branch-Management.html +946 -0
  145. data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell.html +1020 -0
  146. data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Branching-Workflows.html +786 -0
  147. data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Rebasing.html +1028 -0
  148. data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Remote-Branches.html +1009 -0
  149. data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Summary.html +705 -0
  150. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Environment-Variables.html +1009 -0
  151. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Git-Objects.html +1209 -0
  152. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Git-References.html +939 -0
  153. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery.html +1086 -0
  154. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Packfiles.html +876 -0
  155. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain.html +745 -0
  156. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Summary.html +708 -0
  157. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-The-Refspec.html +872 -0
  158. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols.html +1043 -0
  159. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Advanced-Merging.html +1605 -0
  160. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Bundling.html +888 -0
  161. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Credential-Storage.html +1035 -0
  162. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git.html +861 -0
  163. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Interactive-Staging.html +920 -0
  164. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Replace.html +949 -0
  165. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Rerere.html +983 -0
  166. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Reset-Demystified.html +1236 -0
  167. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Revision-Selection.html +1178 -0
  168. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Rewriting-History.html +1182 -0
  169. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Searching.html +875 -0
  170. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work.html +922 -0
  171. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Stashing-and-Cleaning.html +1039 -0
  172. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Submodules.html +1864 -0
  173. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Summary.html +705 -0
  174. data/spec/support/static/git-scm.com/book/en/v2/Git-and-Other-Systems-Git-as-a-Client.html +2656 -0
  175. data/spec/support/static/git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git.html +1741 -0
  176. data/spec/support/static/git-scm.com/book/en/v2/Git-and-Other-Systems-Summary.html +703 -0
  177. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key.html +759 -0
  178. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a-Server.html +827 -0
  179. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Git-Daemon.html +775 -0
  180. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-GitLab.html +872 -0
  181. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-GitWeb.html +776 -0
  182. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server.html +870 -0
  183. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Smart-HTTP.html +789 -0
  184. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Summary.html +709 -0
  185. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols.html +963 -0
  186. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Third-Party-Hosted-Options.html +711 -0
  187. data/spec/support/static/git-scm.com/book/en/v2/GitHub-Account-Setup-and-Configuration.html +858 -0
  188. data/spec/support/static/git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project.html +1502 -0
  189. data/spec/support/static/git-scm.com/book/en/v2/GitHub-Maintaining-a-Project.html +1218 -0
  190. data/spec/support/static/git-scm.com/book/en/v2/GitHub-Managing-an-organization.html +797 -0
  191. data/spec/support/static/git-scm.com/book/en/v2/GitHub-Scripting-GitHub.html +1059 -0
  192. data/spec/support/static/git-scm.com/book/en/v2/GitHub-Summary.html +704 -0
  193. data/spec/support/static/git-scm.com/book/en/v2/ch00/_abort_merge.html +1605 -0
  194. data/spec/support/static/git-scm.com/book/en/v2/ch00/_add_email_addresses.html +858 -0
  195. data/spec/support/static/git-scm.com/book/en/v2/ch00/_advanced_merging.html +1605 -0
  196. data/spec/support/static/git-scm.com/book/en/v2/ch00/_an_example_git_enforced_policy.html +1200 -0
  197. data/spec/support/static/git-scm.com/book/en/v2/ch00/_annotated_tags.html +1049 -0
  198. data/spec/support/static/git-scm.com/book/en/v2/ch00/_api_comment.html +1059 -0
  199. data/spec/support/static/git-scm.com/book/en/v2/ch00/_bare_repo.html +827 -0
  200. data/spec/support/static/git-scm.com/book/en/v2/ch00/_basic_branching.html +1102 -0
  201. data/spec/support/static/git-scm.com/book/en/v2/ch00/_basic_merge_conflicts.html +1102 -0
  202. data/spec/support/static/git-scm.com/book/en/v2/ch00/_basic_merging.html +1102 -0
  203. data/spec/support/static/git-scm.com/book/en/v2/ch00/_binary_search.html +861 -0
  204. data/spec/support/static/git-scm.com/book/en/v2/ch00/_branch_management.html +946 -0
  205. data/spec/support/static/git-scm.com/book/en/v2/ch00/_branch_references.html +1178 -0
  206. data/spec/support/static/git-scm.com/book/en/v2/ch00/_build_number.html +1354 -0
  207. data/spec/support/static/git-scm.com/book/en/v2/ch00/_bundling.html +888 -0
  208. data/spec/support/static/git-scm.com/book/en/v2/ch00/_changing_multiple.html +1182 -0
  209. data/spec/support/static/git-scm.com/book/en/v2/ch00/_checking_out_conflicts.html +1605 -0
  210. data/spec/support/static/git-scm.com/book/en/v2/ch00/_checking_out_remotes.html +1354 -0
  211. data/spec/support/static/git-scm.com/book/en/v2/ch00/_checking_status.html +1432 -0
  212. data/spec/support/static/git-scm.com/book/en/v2/ch00/_cloning_submodules.html +1864 -0
  213. data/spec/support/static/git-scm.com/book/en/v2/ch00/_commit_guidelines.html +1667 -0
  214. data/spec/support/static/git-scm.com/book/en/v2/ch00/_commit_ranges.html +1178 -0
  215. data/spec/support/static/git-scm.com/book/en/v2/ch00/_commit_status.html +1059 -0
  216. data/spec/support/static/git-scm.com/book/en/v2/ch00/_committing_changes.html +1432 -0
  217. data/spec/support/static/git-scm.com/book/en/v2/ch00/_contrib_file.html +1218 -0
  218. data/spec/support/static/git-scm.com/book/en/v2/ch00/_contributing_project.html +1667 -0
  219. data/spec/support/static/git-scm.com/book/en/v2/ch00/_create_new_branch.html +1020 -0
  220. data/spec/support/static/git-scm.com/book/en/v2/ch00/_credential_caching.html +1035 -0
  221. data/spec/support/static/git-scm.com/book/en/v2/ch00/_custom_importer.html +1741 -0
  222. data/spec/support/static/git-scm.com/book/en/v2/ch00/_data_recovery.html +1086 -0
  223. data/spec/support/static/git-scm.com/book/en/v2/ch00/_delete_branches.html +1009 -0
  224. data/spec/support/static/git-scm.com/book/en/v2/ch00/_editor.html +889 -0
  225. data/spec/support/static/git-scm.com/book/en/v2/ch00/_eg_task_lists.html +1502 -0
  226. data/spec/support/static/git-scm.com/book/en/v2/ch00/_email_hooks.html +876 -0
  227. data/spec/support/static/git-scm.com/book/en/v2/ch00/_email_notification.html +1502 -0
  228. data/spec/support/static/git-scm.com/book/en/v2/ch00/_email_notifications.html +1218 -0
  229. data/spec/support/static/git-scm.com/book/en/v2/ch00/_email_pr.html +1218 -0
  230. data/spec/support/static/git-scm.com/book/en/v2/ch00/_enforcing_commit_message_format.html +1200 -0
  231. data/spec/support/static/git-scm.com/book/en/v2/ch00/_example_markdown.html +1502 -0
  232. data/spec/support/static/git-scm.com/book/en/v2/ch00/_external_merge_tools.html +1315 -0
  233. data/spec/support/static/git-scm.com/book/en/v2/ch00/_fetch_and_push_on_different_repositories.html +1502 -0
  234. data/spec/support/static/git-scm.com/book/en/v2/ch00/_fetching_and_pulling.html +983 -0
  235. data/spec/support/static/git-scm.com/book/en/v2/ch00/_file_annotation.html +861 -0
  236. data/spec/support/static/git-scm.com/book/en/v2/ch00/_first_time.html +889 -0
  237. data/spec/support/static/git-scm.com/book/en/v2/ch00/_generate_ssh_key.html +759 -0
  238. data/spec/support/static/git-scm.com/book/en/v2/ch00/_getting_a_repo.html +816 -0
  239. data/spec/support/static/git-scm.com/book/en/v2/ch00/_getting_git_on_a_server.html +827 -0
  240. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_aliases.html +775 -0
  241. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_am.html +1354 -0
  242. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_amend.html +1182 -0
  243. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_branches_overview.html +1020 -0
  244. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_clean.html +1039 -0
  245. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_cloning.html +816 -0
  246. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_commit_objects.html +1209 -0
  247. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_config.html +1315 -0
  248. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_diff_staged.html +1432 -0
  249. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_gc.html +1086 -0
  250. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_grep.html +875 -0
  251. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_help.html +750 -0
  252. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_hooks.html +876 -0
  253. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_mv.html +1432 -0
  254. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_p4.html +1741 -0
  255. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_p4_branches.html +2656 -0
  256. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_reflog.html +1178 -0
  257. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_refs.html +939 -0
  258. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_reset.html +1236 -0
  259. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_stashing.html +1039 -0
  260. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_submodules.html +1864 -0
  261. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_svn.html +2656 -0
  262. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_tagging.html +1049 -0
  263. data/spec/support/static/git-scm.com/book/en/v2/ch00/_gitlab_groups_section.html +872 -0
  264. data/spec/support/static/git-scm.com/book/en/v2/ch00/_ignoring.html +1432 -0
  265. data/spec/support/static/git-scm.com/book/en/v2/ch00/_inspecting_remote.html +983 -0
  266. data/spec/support/static/git-scm.com/book/en/v2/ch00/_integration_manager.html +859 -0
  267. data/spec/support/static/git-scm.com/book/en/v2/ch00/_interactive_staging.html +920 -0
  268. data/spec/support/static/git-scm.com/book/en/v2/ch00/_keyword_expansion.html +1134 -0
  269. data/spec/support/static/git-scm.com/book/en/v2/ch00/_libgit2_bindings.html +1003 -0
  270. data/spec/support/static/git-scm.com/book/en/v2/ch00/_manual_remerge.html +1605 -0
  271. data/spec/support/static/git-scm.com/book/en/v2/ch00/_md_code.html +1502 -0
  272. data/spec/support/static/git-scm.com/book/en/v2/ch00/_md_drag.html +1502 -0
  273. data/spec/support/static/git-scm.com/book/en/v2/ch00/_md_emoji.html +1502 -0
  274. data/spec/support/static/git-scm.com/book/en/v2/ch00/_md_quote.html +1502 -0
  275. data/spec/support/static/git-scm.com/book/en/v2/ch00/_merge_button.html +1218 -0
  276. data/spec/support/static/git-scm.com/book/en/v2/ch00/_merge_log.html +1605 -0
  277. data/spec/support/static/git-scm.com/book/en/v2/ch00/_merge_rebase_work.html +1028 -0
  278. data/spec/support/static/git-scm.com/book/en/v2/ch00/_new_repo_dropdown.html +1218 -0
  279. data/spec/support/static/git-scm.com/book/en/v2/ch00/_not_center.html +1218 -0
  280. data/spec/support/static/git-scm.com/book/en/v2/ch00/_org_page.html +797 -0
  281. data/spec/support/static/git-scm.com/book/en/v2/ch00/_other_client_hooks.html +876 -0
  282. data/spec/support/static/git-scm.com/book/en/v2/ch00/_p4_git_fusion.html +2656 -0
  283. data/spec/support/static/git-scm.com/book/en/v2/ch00/_patches_from_email.html +1354 -0
  284. data/spec/support/static/git-scm.com/book/en/v2/ch00/_personal_avatar.html +858 -0
  285. data/spec/support/static/git-scm.com/book/en/v2/ch00/_plumbing_porcelain.html +745 -0
  286. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_closed.html +1502 -0
  287. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_discussion.html +1502 -0
  288. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_fail.html +1502 -0
  289. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_final.html +1502 -0
  290. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_references.html +1502 -0
  291. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_references_render.html +1502 -0
  292. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_refs.html +1218 -0
  293. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pre_merge_rebase_work.html +1028 -0
  294. data/spec/support/static/git-scm.com/book/en/v2/ch00/_preparing_release.html +1354 -0
  295. data/spec/support/static/git-scm.com/book/en/v2/ch00/_private_team.html +1667 -0
  296. data/spec/support/static/git-scm.com/book/en/v2/ch00/_project_over_email.html +1667 -0
  297. data/spec/support/static/git-scm.com/book/en/v2/ch00/_public_project.html +1667 -0
  298. data/spec/support/static/git-scm.com/book/en/v2/ch00/_publishing_submodules.html +1864 -0
  299. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pushing_branches.html +1009 -0
  300. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pushing_refspecs.html +872 -0
  301. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pushing_remotes.html +983 -0
  302. data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebase_cherry_pick.html +1354 -0
  303. data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebase_peril.html +1028 -0
  304. data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebase_rebase.html +1028 -0
  305. data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebase_rebase_work.html +1028 -0
  306. data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebasing.html +1028 -0
  307. data/spec/support/static/git-scm.com/book/en/v2/ch00/_refspec.html +872 -0
  308. data/spec/support/static/git-scm.com/book/en/v2/ch00/_remote_branches.html +1009 -0
  309. data/spec/support/static/git-scm.com/book/en/v2/ch00/_remote_repos.html +983 -0
  310. data/spec/support/static/git-scm.com/book/en/v2/ch00/_removing_file_every_commit.html +1182 -0
  311. data/spec/support/static/git-scm.com/book/en/v2/ch00/_removing_files.html +1432 -0
  312. data/spec/support/static/git-scm.com/book/en/v2/ch00/_removing_objects.html +1086 -0
  313. data/spec/support/static/git-scm.com/book/en/v2/ch00/_replace.html +949 -0
  314. data/spec/support/static/git-scm.com/book/en/v2/ch00/_reverse_commit.html +1605 -0
  315. data/spec/support/static/git-scm.com/book/en/v2/ch00/_revision_selection.html +1178 -0
  316. data/spec/support/static/git-scm.com/book/en/v2/ch00/_rewriting_history.html +1182 -0
  317. data/spec/support/static/git-scm.com/book/en/v2/ch00/_searching.html +875 -0
  318. data/spec/support/static/git-scm.com/book/en/v2/ch00/_service_config.html +1059 -0
  319. data/spec/support/static/git-scm.com/book/en/v2/ch00/_services_hooks.html +1059 -0
  320. data/spec/support/static/git-scm.com/book/en/v2/ch00/_setting_up_server.html +870 -0
  321. data/spec/support/static/git-scm.com/book/en/v2/ch00/_sharing_tags.html +1049 -0
  322. data/spec/support/static/git-scm.com/book/en/v2/ch00/_signing.html +922 -0
  323. data/spec/support/static/git-scm.com/book/en/v2/ch00/_signing_commits.html +922 -0
  324. data/spec/support/static/git-scm.com/book/en/v2/ch00/_squashing.html +1182 -0
  325. data/spec/support/static/git-scm.com/book/en/v2/ch00/_starting_submodules.html +1864 -0
  326. data/spec/support/static/git-scm.com/book/en/v2/ch00/_subtree_merge.html +1605 -0
  327. data/spec/support/static/git-scm.com/book/en/v2/ch00/_switching_branches.html +1020 -0
  328. data/spec/support/static/git-scm.com/book/en/v2/ch00/_tagging_releases.html +1354 -0
  329. data/spec/support/static/git-scm.com/book/en/v2/ch00/_task_list_progress.html +1502 -0
  330. data/spec/support/static/git-scm.com/book/en/v2/ch00/_team_page.html +797 -0
  331. data/spec/support/static/git-scm.com/book/en/v2/ch00/_the_index.html +1236 -0
  332. data/spec/support/static/git-scm.com/book/en/v2/ch00/_the_shortlog.html +1354 -0
  333. data/spec/support/static/git-scm.com/book/en/v2/ch00/_topic_branch.html +786 -0
  334. data/spec/support/static/git-scm.com/book/en/v2/ch00/_tracking_branches.html +1009 -0
  335. data/spec/support/static/git-scm.com/book/en/v2/ch00/_tracking_files.html +1432 -0
  336. data/spec/support/static/git-scm.com/book/en/v2/ch00/_tree_objects.html +1209 -0
  337. data/spec/support/static/git-scm.com/book/en/v2/ch00/_triple_dot.html +1178 -0
  338. data/spec/support/static/git-scm.com/book/en/v2/ch00/_undoing.html +998 -0
  339. data/spec/support/static/git-scm.com/book/en/v2/ch00/_unstaging.html +998 -0
  340. data/spec/support/static/git-scm.com/book/en/v2/ch00/_viewing_history.html +1172 -0
  341. data/spec/support/static/git-scm.com/book/en/v2/ch00/_web_hook.html +1059 -0
  342. data/spec/support/static/git-scm.com/book/en/v2/ch00/_what_is_introduced.html +1354 -0
  343. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch01-getting-started.html +783 -0
  344. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch02-git-basics-chapter.html +816 -0
  345. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch03-git-branching.html +1020 -0
  346. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch05-distributed-git.html +859 -0
  347. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch06-github.html +858 -0
  348. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch06-github_flow.html +1502 -0
  349. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch10-git-internals.html +745 -0
  350. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch_core_editor.html +863 -0
  351. data/spec/support/static/git-scm.com/book/en/v2/ch00/divergent_history.html +1020 -0
  352. data/spec/support/static/git-scm.com/book/en/v2/ch00/double_dot.html +1178 -0
  353. data/spec/support/static/git-scm.com/book/en/v2/ch00/filters_a.html +1134 -0
  354. data/spec/support/static/git-scm.com/book/en/v2/ch00/filters_b.html +1134 -0
  355. data/spec/support/static/git-scm.com/book/en/v2/ch00/limit_options.html +1172 -0
  356. data/spec/support/static/git-scm.com/book/en/v2/ch00/log_options.html +1172 -0
  357. data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_a.html +1354 -0
  358. data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_b.html +1354 -0
  359. data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_c.html +1354 -0
  360. data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_d.html +1354 -0
  361. data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_e.html +1354 -0
  362. data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_f.html +1354 -0
  363. data/spec/support/static/git-scm.com/book/en/v2/ch00/oh_my_zsh_git.html +765 -0
  364. data/spec/support/static/git-scm.com/book/en/v2/ch00/pretty_format.html +1172 -0
  365. data/spec/support/static/git-scm.com/book/en/v2/ch00/psp_b.html +1667 -0
  366. data/spec/support/static/git-scm.com/book/en/v2/ch00/rbdiag_e.html +1028 -0
  367. data/spec/support/static/git-scm.com/book/en/v2/ch00/rbdiag_g.html +1028 -0
  368. data/spec/support/static/git-scm.com/book/en/v2/ch00/rbdiag_h.html +1028 -0
  369. data/spec/support/static/git-scm.com/book/en/v2/ch00/rbdiag_i.html +1028 -0
  370. data/spec/support/static/git-scm.com/book/en/v2/ch00/rebasing-merging-example.html +1028 -0
  371. data/spec/support/static/git-scm.com/book/en/v2/ch00/ref_rerere.html +983 -0
  372. data/spec/support/static/git-scm.com/book/en/v2/ch00/ref_the_ref.html +939 -0
  373. data/spec/support/static/git-scm.com/book/en/v2/ch00/wfdiag_b.html +859 -0
  374. data/spec/support/static/git-scm.com/book/en/v2/ch00/wfdiag_c.html +859 -0
  375. data/spec/support/static/git-scm.com/book/en/v2/ch00/what_is_git_section.html +857 -0
  376. data/spec/support/static/git-scm.com/book/en/v2/images/2fa-1.png +0 -0
  377. data/spec/support/static/git-scm.com/book/en/v2/images/account-settings.png +0 -0
  378. data/spec/support/static/git-scm.com/book/en/v2/images/advance-master.png +0 -0
  379. data/spec/support/static/git-scm.com/book/en/v2/images/advance-testing.png +0 -0
  380. data/spec/support/static/git-scm.com/book/en/v2/images/areas.png +0 -0
  381. data/spec/support/static/git-scm.com/book/en/v2/images/avatar-crop.png +0 -0
  382. data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-1.png +0 -0
  383. data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-2.png +0 -0
  384. data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-3.png +0 -0
  385. data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-4.png +0 -0
  386. data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-5.png +0 -0
  387. data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-6.png +0 -0
  388. data/spec/support/static/git-scm.com/book/en/v2/images/basic-merging-1.png +0 -0
  389. data/spec/support/static/git-scm.com/book/en/v2/images/basic-merging-2.png +0 -0
  390. data/spec/support/static/git-scm.com/book/en/v2/images/basic-rebase-1.png +0 -0
  391. data/spec/support/static/git-scm.com/book/en/v2/images/basic-rebase-2.png +0 -0
  392. data/spec/support/static/git-scm.com/book/en/v2/images/basic-rebase-3.png +0 -0
  393. data/spec/support/static/git-scm.com/book/en/v2/images/basic-rebase-4.png +0 -0
  394. data/spec/support/static/git-scm.com/book/en/v2/images/benevolent-dictator.png +0 -0
  395. data/spec/support/static/git-scm.com/book/en/v2/images/blink-01-start.png +0 -0
  396. data/spec/support/static/git-scm.com/book/en/v2/images/blink-02-pr.png +0 -0
  397. data/spec/support/static/git-scm.com/book/en/v2/images/blink-03-pull-request-open.png +0 -0
  398. data/spec/support/static/git-scm.com/book/en/v2/images/blink-04-email.png +0 -0
  399. data/spec/support/static/git-scm.com/book/en/v2/images/blink-04-pr-comment.png +0 -0
  400. data/spec/support/static/git-scm.com/book/en/v2/images/blink-05-general-comment.png +0 -0
  401. data/spec/support/static/git-scm.com/book/en/v2/images/blink-06-final.png +0 -0
  402. data/spec/support/static/git-scm.com/book/en/v2/images/branch-and-history.png +0 -0
  403. data/spec/support/static/git-scm.com/book/en/v2/images/branch_widget_mac.png +0 -0
  404. data/spec/support/static/git-scm.com/book/en/v2/images/branch_widget_win.png +0 -0
  405. data/spec/support/static/git-scm.com/book/en/v2/images/centralized.png +0 -0
  406. data/spec/support/static/git-scm.com/book/en/v2/images/centralized_workflow.png +0 -0
  407. data/spec/support/static/git-scm.com/book/en/v2/images/checkout-master.png +0 -0
  408. data/spec/support/static/git-scm.com/book/en/v2/images/clean.png +0 -0
  409. data/spec/support/static/git-scm.com/book/en/v2/images/collaborators.png +0 -0
  410. data/spec/support/static/git-scm.com/book/en/v2/images/commit-and-tree.png +0 -0
  411. data/spec/support/static/git-scm.com/book/en/v2/images/commits-and-parents.png +0 -0
  412. data/spec/support/static/git-scm.com/book/en/v2/images/data-model-1.png +0 -0
  413. data/spec/support/static/git-scm.com/book/en/v2/images/data-model-2.png +0 -0
  414. data/spec/support/static/git-scm.com/book/en/v2/images/data-model-3.png +0 -0
  415. data/spec/support/static/git-scm.com/book/en/v2/images/data-model-4.png +0 -0
  416. data/spec/support/static/git-scm.com/book/en/v2/images/deltas.png +0 -0
  417. data/spec/support/static/git-scm.com/book/en/v2/images/distributed.png +0 -0
  418. data/spec/support/static/git-scm.com/book/en/v2/images/double-dot.png +0 -0
  419. data/spec/support/static/git-scm.com/book/en/v2/images/email-settings.png +0 -0
  420. data/spec/support/static/git-scm.com/book/en/v2/images/forkbutton.png +0 -0
  421. data/spec/support/static/git-scm.com/book/en/v2/images/git-bash.png +0 -0
  422. data/spec/support/static/git-scm.com/book/en/v2/images/git-diff-check.png +0 -0
  423. data/spec/support/static/git-scm.com/book/en/v2/images/git-fusion-boot.png +0 -0
  424. data/spec/support/static/git-scm.com/book/en/v2/images/git-fusion-perforce-graph.png +0 -0
  425. data/spec/support/static/git-scm.com/book/en/v2/images/git-gui.png +0 -0
  426. data/spec/support/static/git-scm.com/book/en/v2/images/git-instaweb.png +0 -0
  427. data/spec/support/static/git-scm.com/book/en/v2/images/git-osx-installer.png +0 -0
  428. data/spec/support/static/git-scm.com/book/en/v2/images/github_mac.png +0 -0
  429. data/spec/support/static/git-scm.com/book/en/v2/images/github_win.png +0 -0
  430. data/spec/support/static/git-scm.com/book/en/v2/images/gitk.png +0 -0
  431. data/spec/support/static/git-scm.com/book/en/v2/images/gitlab-groups.png +0 -0
  432. data/spec/support/static/git-scm.com/book/en/v2/images/gitlab-menu.png +0 -0
  433. data/spec/support/static/git-scm.com/book/en/v2/images/gitlab-users.png +0 -0
  434. data/spec/support/static/git-scm.com/book/en/v2/images/head-to-master.png +0 -0
  435. data/spec/support/static/git-scm.com/book/en/v2/images/head-to-testing.png +0 -0
  436. data/spec/support/static/git-scm.com/book/en/v2/images/integration-manager.png +0 -0
  437. data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-1.png +0 -0
  438. data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-2.png +0 -0
  439. data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-3.png +0 -0
  440. data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-4.png +0 -0
  441. data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-5.png +0 -0
  442. data/spec/support/static/git-scm.com/book/en/v2/images/jb.png +0 -0
  443. data/spec/support/static/git-scm.com/book/en/v2/images/large-merges-1.png +0 -0
  444. data/spec/support/static/git-scm.com/book/en/v2/images/large-merges-2.png +0 -0
  445. data/spec/support/static/git-scm.com/book/en/v2/images/lifecycle.png +0 -0
  446. data/spec/support/static/git-scm.com/book/en/v2/images/local.png +0 -0
  447. data/spec/support/static/git-scm.com/book/en/v2/images/lr-branches-1.png +0 -0
  448. data/spec/support/static/git-scm.com/book/en/v2/images/lr-branches-2.png +0 -0
  449. data/spec/support/static/git-scm.com/book/en/v2/images/maint-01-email.png +0 -0
  450. data/spec/support/static/git-scm.com/book/en/v2/images/maint-02-merge.png +0 -0
  451. data/spec/support/static/git-scm.com/book/en/v2/images/maint-03-email-resp.png +0 -0
  452. data/spec/support/static/git-scm.com/book/en/v2/images/maint-04-target.png +0 -0
  453. data/spec/support/static/git-scm.com/book/en/v2/images/maint-05-mentions.png +0 -0
  454. data/spec/support/static/git-scm.com/book/en/v2/images/maint-06-unsubscribe.png +0 -0
  455. data/spec/support/static/git-scm.com/book/en/v2/images/maint-07-notifications.png +0 -0
  456. data/spec/support/static/git-scm.com/book/en/v2/images/maint-08-notifications-page.png +0 -0
  457. data/spec/support/static/git-scm.com/book/en/v2/images/maint-09-contrib.png +0 -0
  458. data/spec/support/static/git-scm.com/book/en/v2/images/maint-10-default-branch.png +0 -0
  459. data/spec/support/static/git-scm.com/book/en/v2/images/maint-11-transfer.png +0 -0
  460. data/spec/support/static/git-scm.com/book/en/v2/images/managed-team-1.png +0 -0
  461. data/spec/support/static/git-scm.com/book/en/v2/images/managed-team-2.png +0 -0
  462. data/spec/support/static/git-scm.com/book/en/v2/images/managed-team-3.png +0 -0
  463. data/spec/support/static/git-scm.com/book/en/v2/images/managed-team-flow.png +0 -0
  464. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-01-example.png +0 -0
  465. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-02-tasks.png +0 -0
  466. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-03-task-summary.png +0 -0
  467. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-04-fenced-code.png +0 -0
  468. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-05-quote.png +0 -0
  469. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-06-emoji-complete.png +0 -0
  470. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-07-emoji.png +0 -0
  471. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-08-drag-drop.png +0 -0
  472. data/spec/support/static/git-scm.com/book/en/v2/images/mentions-01-syntax.png +0 -0
  473. data/spec/support/static/git-scm.com/book/en/v2/images/mentions-02-render.png +0 -0
  474. data/spec/support/static/git-scm.com/book/en/v2/images/mentions-03-closed.png +0 -0
  475. data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-1.png +0 -0
  476. data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-2.png +0 -0
  477. data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-3.png +0 -0
  478. data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-4.png +0 -0
  479. data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-5.png +0 -0
  480. data/spec/support/static/git-scm.com/book/en/v2/images/new-repo.png +0 -0
  481. data/spec/support/static/git-scm.com/book/en/v2/images/neworg.png +0 -0
  482. data/spec/support/static/git-scm.com/book/en/v2/images/newrepo.png +0 -0
  483. data/spec/support/static/git-scm.com/book/en/v2/images/newrepoform.png +0 -0
  484. data/spec/support/static/git-scm.com/book/en/v2/images/orgs-01-page.png +0 -0
  485. data/spec/support/static/git-scm.com/book/en/v2/images/orgs-02-teams.png +0 -0
  486. data/spec/support/static/git-scm.com/book/en/v2/images/orgs-03-audit.png +0 -0
  487. data/spec/support/static/git-scm.com/book/en/v2/images/p4merge.png +0 -0
  488. data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-1.png +0 -0
  489. data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-2.png +0 -0
  490. data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-3.png +0 -0
  491. data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-4.png +0 -0
  492. data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-5.png +0 -0
  493. data/spec/support/static/git-scm.com/book/en/v2/images/posh-git.png +0 -0
  494. data/spec/support/static/git-scm.com/book/en/v2/images/pr-01-fail.png +0 -0
  495. data/spec/support/static/git-scm.com/book/en/v2/images/pr-02-merge-fix.png +0 -0
  496. data/spec/support/static/git-scm.com/book/en/v2/images/public-small-1.png +0 -0
  497. data/spec/support/static/git-scm.com/book/en/v2/images/public-small-2.png +0 -0
  498. data/spec/support/static/git-scm.com/book/en/v2/images/public-small-3.png +0 -0
  499. data/spec/support/static/git-scm.com/book/en/v2/images/rebasing-1.png +0 -0
  500. data/spec/support/static/git-scm.com/book/en/v2/images/rebasing-2.png +0 -0
  501. data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-1.png +0 -0
  502. data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-2.png +0 -0
  503. data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-3.png +0 -0
  504. data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-4.png +0 -0
  505. data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-5.png +0 -0
  506. data/spec/support/static/git-scm.com/book/en/v2/images/replace1.png +0 -0
  507. data/spec/support/static/git-scm.com/book/en/v2/images/replace2.png +0 -0
  508. data/spec/support/static/git-scm.com/book/en/v2/images/replace3.png +0 -0
  509. data/spec/support/static/git-scm.com/book/en/v2/images/replace4.png +0 -0
  510. data/spec/support/static/git-scm.com/book/en/v2/images/replace5.png +0 -0
  511. data/spec/support/static/git-scm.com/book/en/v2/images/reposettingslink.png +0 -0
  512. data/spec/support/static/git-scm.com/book/en/v2/images/rerere1.png +0 -0
  513. data/spec/support/static/git-scm.com/book/en/v2/images/rerere2.png +0 -0
  514. data/spec/support/static/git-scm.com/book/en/v2/images/rerere3.png +0 -0
  515. data/spec/support/static/git-scm.com/book/en/v2/images/reset-checkout.png +0 -0
  516. data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex1.png +0 -0
  517. data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex2.png +0 -0
  518. data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex3.png +0 -0
  519. data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex4.png +0 -0
  520. data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex5.png +0 -0
  521. data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex6.png +0 -0
  522. data/spec/support/static/git-scm.com/book/en/v2/images/reset-hard.png +0 -0
  523. data/spec/support/static/git-scm.com/book/en/v2/images/reset-mixed.png +0 -0
  524. data/spec/support/static/git-scm.com/book/en/v2/images/reset-path1.png +0 -0
  525. data/spec/support/static/git-scm.com/book/en/v2/images/reset-path2.png +0 -0
  526. data/spec/support/static/git-scm.com/book/en/v2/images/reset-path3.png +0 -0
  527. data/spec/support/static/git-scm.com/book/en/v2/images/reset-soft.png +0 -0
  528. data/spec/support/static/git-scm.com/book/en/v2/images/reset-squash-r1.png +0 -0
  529. data/spec/support/static/git-scm.com/book/en/v2/images/reset-squash-r2.png +0 -0
  530. data/spec/support/static/git-scm.com/book/en/v2/images/reset-squash-r3.png +0 -0
  531. data/spec/support/static/git-scm.com/book/en/v2/images/reset-start.png +0 -0
  532. data/spec/support/static/git-scm.com/book/en/v2/images/reset-workflow.png +0 -0
  533. data/spec/support/static/git-scm.com/book/en/v2/images/scripting-01-services.png +0 -0
  534. data/spec/support/static/git-scm.com/book/en/v2/images/scripting-02-email-service.png +0 -0
  535. data/spec/support/static/git-scm.com/book/en/v2/images/scripting-03-webhook.png +0 -0
  536. data/spec/support/static/git-scm.com/book/en/v2/images/scripting-04-webhook-debug.png +0 -0
  537. data/spec/support/static/git-scm.com/book/en/v2/images/scripting-05-access-token.png +0 -0
  538. data/spec/support/static/git-scm.com/book/en/v2/images/scripting-06-comment.png +0 -0
  539. data/spec/support/static/git-scm.com/book/en/v2/images/scripting-07-status.png +0 -0
  540. data/spec/support/static/git-scm.com/book/en/v2/images/signup.png +0 -0
  541. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-1.png +0 -0
  542. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-2.png +0 -0
  543. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-3.png +0 -0
  544. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-4.png +0 -0
  545. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-5.png +0 -0
  546. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-6.png +0 -0
  547. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-7.png +0 -0
  548. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-flow.png +0 -0
  549. data/spec/support/static/git-scm.com/book/en/v2/images/smudge.png +0 -0
  550. data/spec/support/static/git-scm.com/book/en/v2/images/snapshots.png +0 -0
  551. data/spec/support/static/git-scm.com/book/en/v2/images/ssh-keys.png +0 -0
  552. data/spec/support/static/git-scm.com/book/en/v2/images/topic-branches-1.png +0 -0
  553. data/spec/support/static/git-scm.com/book/en/v2/images/topic-branches-2.png +0 -0
  554. data/spec/support/static/git-scm.com/book/en/v2/images/two-branches.png +0 -0
  555. data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-reset.png +0 -0
  556. data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-revert.png +0 -0
  557. data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-revert2.png +0 -0
  558. data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-revert3.png +0 -0
  559. data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-start.png +0 -0
  560. data/spec/support/static/git-scm.com/book/en/v2/images/your-profile.png +0 -0
  561. data/spec/support/static/git-scm.com/book/en/v2/images/zsh-oh-my.png +0 -0
  562. data/spec/support/static/git-scm.com/book/en/v2/images/zsh-prompt.png +0 -0
  563. data/spec/support/static/git-scm.com/book/en/v2.html +688 -0
  564. data/spec/support/static/git-scm.com/favicon.ico +0 -0
  565. data/spec/support/static/git-scm.com/images/bg/body.jpg +0 -0
  566. data/spec/support/static/git-scm.com/images/bg/isometric-grid.png +0 -0
  567. data/spec/support/static/git-scm.com/images/bg/isometric-grid@2x.png +0 -0
  568. data/spec/support/static/git-scm.com/images/bg/search-header.jpg +0 -0
  569. data/spec/support/static/git-scm.com/images/company-project-logos/android.png +0 -0
  570. data/spec/support/static/git-scm.com/images/company-project-logos/android@2x.png +0 -0
  571. data/spec/support/static/git-scm.com/images/company-project-logos/eclipse.png +0 -0
  572. data/spec/support/static/git-scm.com/images/company-project-logos/eclipse@2x.png +0 -0
  573. data/spec/support/static/git-scm.com/images/company-project-logos/facebook.png +0 -0
  574. data/spec/support/static/git-scm.com/images/company-project-logos/facebook@2x.png +0 -0
  575. data/spec/support/static/git-scm.com/images/company-project-logos/gnome.png +0 -0
  576. data/spec/support/static/git-scm.com/images/company-project-logos/gnome@2x.png +0 -0
  577. data/spec/support/static/git-scm.com/images/company-project-logos/google.png +0 -0
  578. data/spec/support/static/git-scm.com/images/company-project-logos/google@2x.png +0 -0
  579. data/spec/support/static/git-scm.com/images/company-project-logos/kde.png +0 -0
  580. data/spec/support/static/git-scm.com/images/company-project-logos/kde@2x.png +0 -0
  581. data/spec/support/static/git-scm.com/images/company-project-logos/linked-in.png +0 -0
  582. data/spec/support/static/git-scm.com/images/company-project-logos/linked-in@2x.png +0 -0
  583. data/spec/support/static/git-scm.com/images/company-project-logos/linux.png +0 -0
  584. data/spec/support/static/git-scm.com/images/company-project-logos/linux@2x.png +0 -0
  585. data/spec/support/static/git-scm.com/images/company-project-logos/microsoft.png +0 -0
  586. data/spec/support/static/git-scm.com/images/company-project-logos/microsoft@2x.png +0 -0
  587. data/spec/support/static/git-scm.com/images/company-project-logos/netflix.png +0 -0
  588. data/spec/support/static/git-scm.com/images/company-project-logos/netflix@2x.png +0 -0
  589. data/spec/support/static/git-scm.com/images/company-project-logos/perl.png +0 -0
  590. data/spec/support/static/git-scm.com/images/company-project-logos/perl@2x.png +0 -0
  591. data/spec/support/static/git-scm.com/images/company-project-logos/postgresql.png +0 -0
  592. data/spec/support/static/git-scm.com/images/company-project-logos/postgresql@2x.png +0 -0
  593. data/spec/support/static/git-scm.com/images/company-project-logos/qt.png +0 -0
  594. data/spec/support/static/git-scm.com/images/company-project-logos/qt@2x.png +0 -0
  595. data/spec/support/static/git-scm.com/images/company-project-logos/rails.png +0 -0
  596. data/spec/support/static/git-scm.com/images/company-project-logos/rails@2x.png +0 -0
  597. data/spec/support/static/git-scm.com/images/company-project-logos/twitter.png +0 -0
  598. data/spec/support/static/git-scm.com/images/company-project-logos/twitter@2x.png +0 -0
  599. data/spec/support/static/git-scm.com/images/company-project-logos/x.png +0 -0
  600. data/spec/support/static/git-scm.com/images/company-project-logos/x@2x.png +0 -0
  601. data/spec/support/static/git-scm.com/images/epub.png +0 -0
  602. data/spec/support/static/git-scm.com/images/icons/admin-sm.png +0 -0
  603. data/spec/support/static/git-scm.com/images/icons/admin-sm@2x.png +0 -0
  604. data/spec/support/static/git-scm.com/images/icons/apple.png +0 -0
  605. data/spec/support/static/git-scm.com/images/icons/apple@2x.png +0 -0
  606. data/spec/support/static/git-scm.com/images/icons/book.png +0 -0
  607. data/spec/support/static/git-scm.com/images/icons/book@2x.png +0 -0
  608. data/spec/support/static/git-scm.com/images/icons/box.png +0 -0
  609. data/spec/support/static/git-scm.com/images/icons/box@2x.png +0 -0
  610. data/spec/support/static/git-scm.com/images/icons/branch-sm.png +0 -0
  611. data/spec/support/static/git-scm.com/images/icons/branch-sm@2x.png +0 -0
  612. data/spec/support/static/git-scm.com/images/icons/camera-sm.png +0 -0
  613. data/spec/support/static/git-scm.com/images/icons/camera-sm@2x.png +0 -0
  614. data/spec/support/static/git-scm.com/images/icons/chevron-up@2x.png +0 -0
  615. data/spec/support/static/git-scm.com/images/icons/code.png +0 -0
  616. data/spec/support/static/git-scm.com/images/icons/code@2x.png +0 -0
  617. data/spec/support/static/git-scm.com/images/icons/debugging-sm.png +0 -0
  618. data/spec/support/static/git-scm.com/images/icons/debugging-sm@2x.png +0 -0
  619. data/spec/support/static/git-scm.com/images/icons/document.png +0 -0
  620. data/spec/support/static/git-scm.com/images/icons/document@2x.png +0 -0
  621. data/spec/support/static/git-scm.com/images/icons/download.png +0 -0
  622. data/spec/support/static/git-scm.com/images/icons/email-sm.png +0 -0
  623. data/spec/support/static/git-scm.com/images/icons/email-sm@2x.png +0 -0
  624. data/spec/support/static/git-scm.com/images/icons/external-sm.png +0 -0
  625. data/spec/support/static/git-scm.com/images/icons/external-sm@2x.png +0 -0
  626. data/spec/support/static/git-scm.com/images/icons/gui.png +0 -0
  627. data/spec/support/static/git-scm.com/images/icons/gui@2x.png +0 -0
  628. data/spec/support/static/git-scm.com/images/icons/info.png +0 -0
  629. data/spec/support/static/git-scm.com/images/icons/info@2x.png +0 -0
  630. data/spec/support/static/git-scm.com/images/icons/inspection-sm.png +0 -0
  631. data/spec/support/static/git-scm.com/images/icons/inspection-sm@2x.png +0 -0
  632. data/spec/support/static/git-scm.com/images/icons/linux.png +0 -0
  633. data/spec/support/static/git-scm.com/images/icons/linux@2x.png +0 -0
  634. data/spec/support/static/git-scm.com/images/icons/nav-circles.png +0 -0
  635. data/spec/support/static/git-scm.com/images/icons/nav-circles@2x.png +0 -0
  636. data/spec/support/static/git-scm.com/images/icons/patching-sm.png +0 -0
  637. data/spec/support/static/git-scm.com/images/icons/patching-sm@2x.png +0 -0
  638. data/spec/support/static/git-scm.com/images/icons/plumbing-sm.png +0 -0
  639. data/spec/support/static/git-scm.com/images/icons/plumbing-sm@2x.png +0 -0
  640. data/spec/support/static/git-scm.com/images/icons/projects-sm.png +0 -0
  641. data/spec/support/static/git-scm.com/images/icons/projects-sm@2x.png +0 -0
  642. data/spec/support/static/git-scm.com/images/icons/search.png +0 -0
  643. data/spec/support/static/git-scm.com/images/icons/search@2x.png +0 -0
  644. data/spec/support/static/git-scm.com/images/icons/server-admin-sm.png +0 -0
  645. data/spec/support/static/git-scm.com/images/icons/server-admin-sm@2x.png +0 -0
  646. data/spec/support/static/git-scm.com/images/icons/setup-sm.png +0 -0
  647. data/spec/support/static/git-scm.com/images/icons/setup-sm@2x.png +0 -0
  648. data/spec/support/static/git-scm.com/images/icons/sharing-sm.png +0 -0
  649. data/spec/support/static/git-scm.com/images/icons/sharing-sm@2x.png +0 -0
  650. data/spec/support/static/git-scm.com/images/icons/sidebar.png +0 -0
  651. data/spec/support/static/git-scm.com/images/icons/sidebar@2x.png +0 -0
  652. data/spec/support/static/git-scm.com/images/icons/source-code.png +0 -0
  653. data/spec/support/static/git-scm.com/images/icons/source-code@2x.png +0 -0
  654. data/spec/support/static/git-scm.com/images/icons/windows.png +0 -0
  655. data/spec/support/static/git-scm.com/images/icons/windows@2x.png +0 -0
  656. data/spec/support/static/git-scm.com/images/logo@2x.png +0 -0
  657. data/spec/support/static/git-scm.com/images/mobi.png +0 -0
  658. data/spec/support/static/git-scm.com/images/monitor-default.png +0 -0
  659. data/spec/support/static/git-scm.com/images/monitor-default@2x.png +0 -0
  660. data/spec/support/static/git-scm.com/images/monitor-linux.png +0 -0
  661. data/spec/support/static/git-scm.com/images/monitor-linux@2x.png +0 -0
  662. data/spec/support/static/git-scm.com/images/monitor-mac.png +0 -0
  663. data/spec/support/static/git-scm.com/images/monitor-mac@2x.png +0 -0
  664. data/spec/support/static/git-scm.com/images/monitor-windows.png +0 -0
  665. data/spec/support/static/git-scm.com/images/monitor-windows@2x.png +0 -0
  666. data/spec/support/static/git-scm.com/images/pdf.png +0 -0
  667. data/spec/support/static/git-scm.com/images/progit2.png +0 -0
  668. data/spec/support/static/git-scm.com/images/sidebar-divider.png +0 -0
  669. data/spec/support/static/git-scm.com/images/sidebar-divider@2x.png +0 -0
  670. data/spec/support/static/git-scm.com/robots.txt +0 -0
  671. data/spec/task_spec.rb +7 -0
  672. data/wayfarer.gemspec +2 -2
  673. metadata +620 -16
  674. data/lib/wayfarer/middleware/worker.rb +0 -50
  675. data/spec/factories/queue/chain.rb +0 -11
  676. data/spec/middleware/worker_spec.rb +0 -127
@@ -0,0 +1,1502 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <!-- Global site tag (gtag.js) - Google Analytics -->
6
+ <script async src="https://www.googletagmanager.com/gtag/js?id=UA-49925874-3"></script>
7
+ <script>
8
+ window.dataLayer = window.dataLayer || [];
9
+ function gtag(){dataLayer.push(arguments);}
10
+ gtag('js', new Date());
11
+
12
+ gtag('config', 'UA-49925874-3');
13
+ </script>
14
+
15
+ <meta charset='utf-8'>
16
+ <meta content='IE=edge,chrome=1' http-equiv='X-UA-Compatible'>
17
+ <meta name="viewport" content="width=device-width, initial-scale=1">
18
+ <title>Git - Contributing to a Project</title>
19
+
20
+ <link href='../../../../favicon.ico' rel='shortcut icon' type='image/x-icon'>
21
+
22
+ <link rel="stylesheet" media="screen" href="../../../../assets/application-cafcf280f67db0e6d8168ba98a38da878769a9d5f37793b68ffb963a02d185e0.css" />
23
+ <script src="../../../../assets/modernize-b3ebe0c31c24f230dc62179d3e1030d2e57a53b1668d9382c0a27dbd44a94beb.js"></script>
24
+ <!--[if (gte IE 6)&(lte IE 8)]>
25
+ <script src="/javascripts/selectivizr-min.js"></script>
26
+ <![endif]-->
27
+
28
+ </head>
29
+
30
+ <body id="documentation">
31
+
32
+ <div class="inner">
33
+ <header>
34
+
35
+ <a href="https://git-scm.com/"><img src="../../../../images/logo@2x.png" width="110" height="46" alt="Git" /></a>
36
+ <span id="tagline"></span>
37
+ <script type="text/javascript">
38
+ var taglines = ["fast-version-control","everything-is-local","distributed-even-if-your-workflow-isnt","local-branching-on-the-cheap","distributed-is-the-new-centralized"];
39
+ var tagline = taglines[Math.floor(Math.random() * taglines.length)];
40
+ document.getElementById('tagline').innerHTML = '--' + tagline;
41
+ </script>
42
+ <form id="search" action="https://git-scm.com/search/results">
43
+ <input id="search-text" name="search" placeholder="Search entire site..." autocomplete="off" type="text" />
44
+ </form>
45
+ <div id="search-results"></div>
46
+
47
+ </header>
48
+
49
+ </div> <!-- .inner -->
50
+
51
+ <div class="inner">
52
+ <div id="content-wrapper">
53
+ <button class="sidebar-btn"></button>
54
+ <aside class="sidebar" id="sidebar">
55
+ <nav>
56
+ <ul>
57
+ <li>
58
+ <a href="https://git-scm.com/about">About</a>
59
+ <ul class="">
60
+ <li>
61
+ <a href="https://git-scm.com/about">Branching and Merging</a>
62
+ </li>
63
+ <li>
64
+ <a href="https://git-scm.com/about/small-and-fast">Small and Fast</a>
65
+ </li>
66
+ <li>
67
+ <a href="https://git-scm.com/about/distributed">Distributed</a>
68
+ </li>
69
+ <li>
70
+ <a href="https://git-scm.com/about/info-assurance">Data Assurance</a>
71
+ </li>
72
+ <li>
73
+ <a href="https://git-scm.com/about/staging-area">Staging Area</a>
74
+ </li>
75
+ <li>
76
+ <a href="https://git-scm.com/about/free-and-open-source">Free and Open Source</a>
77
+ </li>
78
+ <li>
79
+ <a href="https://git-scm.com/about/trademark">Trademark</a>
80
+ </li>
81
+ </ul>
82
+ </li>
83
+ <li>
84
+ <a class="active" href="https://git-scm.com/doc">Documentation</a>
85
+ <ul class="expanded">
86
+ <li>
87
+ <a href="https://git-scm.com/docs">Reference</a>
88
+ </li>
89
+ <li>
90
+ <a class="active" href="https://git-scm.com/book">Book</a>
91
+ </li>
92
+ <li>
93
+ <a href="https://git-scm.com/videos">Videos</a>
94
+ </li>
95
+ <li>
96
+ <a href="https://git-scm.com/doc/ext">External Links</a>
97
+ </li>
98
+ </ul>
99
+ </li>
100
+ <li>
101
+ <a href="https://git-scm.com/downloads">Downloads</a>
102
+ <ul class="">
103
+ <li>
104
+ <a href="https://git-scm.com/downloads/guis">GUI Clients</a>
105
+ </li>
106
+ <li>
107
+ <a href="https://git-scm.com/downloads/logos">Logos</a>
108
+ </li>
109
+ </ul>
110
+ </li>
111
+ <li>
112
+ <a href="https://git-scm.com/community">Community</a>
113
+ </li>
114
+ </ul>
115
+ <hr class="sidebar">
116
+ <p>
117
+ This book is available in
118
+ <a href="https://git-scm.com/book/en">English</a>.
119
+ </p>
120
+ <p>
121
+ Full translation available in
122
+ <table>
123
+ <tr><td><a href="https://git-scm.com/book/az">azərbaycan dili</a>,</td></tr>
124
+ <tr><td><a href="https://git-scm.com/book/bg">български език</a>,</td></tr>
125
+ <tr><td><a href="https://git-scm.com/book/de">Deutsch</a>,</td></tr>
126
+ <tr><td><a href="https://git-scm.com/book/es">Español</a>,</td></tr>
127
+ <tr><td><a href="https://git-scm.com/book/fr">Français</a>,</td></tr>
128
+ <tr><td><a href="https://git-scm.com/book/gr">Ελληνικά</a>,</td></tr>
129
+ <tr><td><a href="https://git-scm.com/book/ja">日本語</a>,</td></tr>
130
+ <tr><td><a href="https://git-scm.com/book/ko">한국어</a>,</td></tr>
131
+ <tr><td><a href="https://git-scm.com/book/nl">Nederlands</a>,</td></tr>
132
+ <tr><td><a href="https://git-scm.com/book/ru">Русский</a>,</td></tr>
133
+ <tr><td><a href="https://git-scm.com/book/sl">Slovenščina</a>,</td></tr>
134
+ <tr><td><a href="https://git-scm.com/book/tl">Tagalog</a>,</td></tr>
135
+ <tr><td><a href="https://git-scm.com/book/uk">Українська</a></td></tr>
136
+ <tr><td><a href="https://git-scm.com/book/zh">简体中文</a>,</td></tr>
137
+ </table>
138
+ </p>
139
+ <p>
140
+ Partial translations available in
141
+ <table>
142
+ <tr><td><a href="https://git-scm.com/book/cs">Čeština</a>,</td></tr>
143
+ <tr><td><a href="https://git-scm.com/book/mk">Македонски</a>,</td></tr>
144
+ <tr><td><a href="https://git-scm.com/book/pl">Polski</a>,</td></tr>
145
+ <tr><td><a href="https://git-scm.com/book/sr">Српски</a>,</td></tr>
146
+ <tr><td><a href="https://git-scm.com/book/uz">Ўзбекча</a>,</td></tr>
147
+ <tr><td><a href="https://git-scm.com/book/zh-tw">繁體中文</a>,</td></tr>
148
+ </table>
149
+ </p>
150
+ <p>
151
+ Translations started for
152
+ <table>
153
+ <tr><td><a href="https://git-scm.com/book/be">Беларуская</a>,</td></tr>
154
+ <tr><td><a href="https://git-scm.com/book/fa" dir="rtl">فارسی</a>,</td></tr>
155
+ <tr><td><a href="https://git-scm.com/book/id">Indonesian</a>,</td></tr>
156
+ <tr><td><a href="https://git-scm.com/book/it">Italiano</a>,</td></tr>
157
+ <tr><td><a href="https://git-scm.com/book/ms">Bahasa Melayu</a>,</td></tr>
158
+ <tr><td><a href="https://git-scm.com/book/pt-br">Português (Brasil)</a>,</td></tr>
159
+ <tr><td><a href="https://git-scm.com/book/pt-pt">Português (Portugal)</a>,</td></tr>
160
+ <tr><td><a href="https://git-scm.com/book/sv">Svenska</a>,</td></tr>
161
+ <tr><td><a href="https://git-scm.com/book/tr">Türkçe</a>.</td></tr>
162
+ </table>
163
+ </p>
164
+ <hr class="sidebar"/>
165
+ <p>
166
+ The source of this book is <a href="https://github.com/progit/progit2">hosted on GitHub.</a></br>
167
+ Patches, suggestions and comments are welcome.
168
+ </p>
169
+
170
+
171
+ </nav>
172
+ </aside>
173
+
174
+ <div id="content">
175
+
176
+
177
+ <div id='book-chapters'>
178
+ <a class="dropdown-trigger" id="book-chapters-trigger" data-panel-id="chapters-dropdown" href="_fetch_and_push_on_different_repositories.html#">Chapters ▾</a>
179
+ <div class='dropdown-panel' id='chapters-dropdown'>
180
+ <div class="three-column">
181
+ <div class='column-left'>
182
+ <ol class='book-toc'>
183
+ <li class='chapter'>
184
+ <h2>1. <a href="ch01-getting-started.html">Getting Started</a></h2>
185
+ <ol>
186
+ <li>
187
+ 1.1
188
+ <a href="ch01-getting-started.html" >About Version Control </a>
189
+ </li>
190
+ <li>
191
+ 1.2
192
+ <a href="../Getting-Started-A-Short-History-of-Git.html" >A Short History of Git </a>
193
+ </li>
194
+ <li>
195
+ 1.3
196
+ <a href="what_is_git_section.html" >What is Git? </a>
197
+ </li>
198
+ <li>
199
+ 1.4
200
+ <a href="../Getting-Started-The-Command-Line.html" >The Command Line </a>
201
+ </li>
202
+ <li>
203
+ 1.5
204
+ <a href="../Getting-Started-Installing-Git.html" >Installing Git </a>
205
+ </li>
206
+ <li>
207
+ 1.6
208
+ <a href="_editor.html" >First-Time Git Setup </a>
209
+ </li>
210
+ <li>
211
+ 1.7
212
+ <a href="_git_help.html" >Getting Help </a>
213
+ </li>
214
+ <li>
215
+ 1.8
216
+ <a href="../Getting-Started-Summary.html" >Summary </a>
217
+ </li>
218
+ </ol>
219
+ </li>
220
+ <li class='chapter'>
221
+ <h2>2. <a href="_git_cloning.html">Git Basics</a></h2>
222
+ <ol>
223
+ <li>
224
+ 2.1
225
+ <a href="_git_cloning.html" >Getting a Git Repository </a>
226
+ </li>
227
+ <li>
228
+ 2.2
229
+ <a href="_git_mv.html" >Recording Changes to the Repository </a>
230
+ </li>
231
+ <li>
232
+ 2.3
233
+ <a href="_viewing_history.html" >Viewing the Commit History </a>
234
+ </li>
235
+ <li>
236
+ 2.4
237
+ <a href="_unstaging.html" >Undoing Things </a>
238
+ </li>
239
+ <li>
240
+ 2.5
241
+ <a href="_remote_repos.html" >Working with Remotes </a>
242
+ </li>
243
+ <li>
244
+ 2.6
245
+ <a href="_annotated_tags.html" >Tagging </a>
246
+ </li>
247
+ <li>
248
+ 2.7
249
+ <a href="_git_aliases.html" >Git Aliases </a>
250
+ </li>
251
+ <li>
252
+ 2.8
253
+ <a href="../Git-Basics-Summary.html" >Summary </a>
254
+ </li>
255
+ </ol>
256
+ </li>
257
+ <li class='chapter'>
258
+ <h2>3. <a href="_switching_branches.html">Git Branching</a></h2>
259
+ <ol>
260
+ <li>
261
+ 3.1
262
+ <a href="_switching_branches.html" >Branches in a Nutshell </a>
263
+ </li>
264
+ <li>
265
+ 3.2
266
+ <a href="_basic_branching.html" >Basic Branching and Merging </a>
267
+ </li>
268
+ <li>
269
+ 3.3
270
+ <a href="_branch_management.html" >Branch Management </a>
271
+ </li>
272
+ <li>
273
+ 3.4
274
+ <a href="_topic_branch.html" >Branching Workflows </a>
275
+ </li>
276
+ <li>
277
+ 3.5
278
+ <a href="_delete_branches.html" >Remote Branches </a>
279
+ </li>
280
+ <li>
281
+ 3.6
282
+ <a href="_rebase_rebase.html" >Rebasing </a>
283
+ </li>
284
+ <li>
285
+ 3.7
286
+ <a href="../Git-Branching-Summary.html" >Summary </a>
287
+ </li>
288
+ </ol>
289
+ </li>
290
+ <li class='chapter'>
291
+ <h2>4. <a href="../Git-on-the-Server-The-Protocols.html">Git on the Server</a></h2>
292
+ <ol>
293
+ <li>
294
+ 4.1
295
+ <a href="../Git-on-the-Server-The-Protocols.html" >The Protocols </a>
296
+ </li>
297
+ <li>
298
+ 4.2
299
+ <a href="_bare_repo.html" >Getting Git on a Server </a>
300
+ </li>
301
+ <li>
302
+ 4.3
303
+ <a href="_generate_ssh_key.html" >Generating Your SSH Public Key </a>
304
+ </li>
305
+ <li>
306
+ 4.4
307
+ <a href="_setting_up_server.html" >Setting Up the Server </a>
308
+ </li>
309
+ <li>
310
+ 4.5
311
+ <a href="../Git-on-the-Server-Git-Daemon.html" >Git Daemon </a>
312
+ </li>
313
+ <li>
314
+ 4.6
315
+ <a href="../Git-on-the-Server-Smart-HTTP.html" >Smart HTTP </a>
316
+ </li>
317
+ <li>
318
+ 4.7
319
+ <a href="../Git-on-the-Server-GitWeb.html" >GitWeb </a>
320
+ </li>
321
+ <li>
322
+ 4.8
323
+ <a href="_gitlab_groups_section.html" >GitLab </a>
324
+ </li>
325
+ <li>
326
+ 4.9
327
+ <a href="../Git-on-the-Server-Third-Party-Hosted-Options.html" >Third Party Hosted Options </a>
328
+ </li>
329
+ <li>
330
+ 4.10
331
+ <a href="../Git-on-the-Server-Summary.html" >Summary </a>
332
+ </li>
333
+ </ol>
334
+ </li>
335
+ <li class='chapter'>
336
+ <h2>5. <a href="_integration_manager.html">Distributed Git</a></h2>
337
+ <ol>
338
+ <li>
339
+ 5.1
340
+ <a href="_integration_manager.html" >Distributed Workflows </a>
341
+ </li>
342
+ <li>
343
+ 5.2
344
+ <a href="_project_over_email.html" >Contributing to a Project </a>
345
+ </li>
346
+ <li>
347
+ 5.3
348
+ <a href="_git_am.html" >Maintaining a Project </a>
349
+ </li>
350
+ <li>
351
+ 5.4
352
+ <a href="../Distributed-Git-Summary.html" >Summary </a>
353
+ </li>
354
+ </ol>
355
+ </li>
356
+ </ol>
357
+
358
+ </div>
359
+ <div class='column-middle'>
360
+ <ol class='book-toc'>
361
+ <li class='chapter'>
362
+ <h2>6. <a href="_personal_avatar.html">GitHub</a></h2>
363
+ <ol>
364
+ <li>
365
+ 6.1
366
+ <a href="_personal_avatar.html" >Account Setup and Configuration </a>
367
+ </li>
368
+ <li>
369
+ 6.2
370
+ <a href="_fetch_and_push_on_different_repositories.html" class=active>Contributing to a Project </a>
371
+ </li>
372
+ <li>
373
+ 6.3
374
+ <a href="_email_notifications.html" >Maintaining a Project </a>
375
+ </li>
376
+ <li>
377
+ 6.4
378
+ <a href="_team_page.html" >Managing an organization </a>
379
+ </li>
380
+ <li>
381
+ 6.5
382
+ <a href="_commit_status.html" >Scripting GitHub </a>
383
+ </li>
384
+ <li>
385
+ 6.6
386
+ <a href="../GitHub-Summary.html" >Summary </a>
387
+ </li>
388
+ </ol>
389
+ </li>
390
+ <li class='chapter'>
391
+ <h2>7. <a href="_git_reflog.html">Git Tools</a></h2>
392
+ <ol>
393
+ <li>
394
+ 7.1
395
+ <a href="_git_reflog.html" >Revision Selection </a>
396
+ </li>
397
+ <li>
398
+ 7.2
399
+ <a href="_interactive_staging.html" >Interactive Staging </a>
400
+ </li>
401
+ <li>
402
+ 7.3
403
+ <a href="_git_clean.html" >Stashing and Cleaning </a>
404
+ </li>
405
+ <li>
406
+ 7.4
407
+ <a href="_signing_commits.html" >Signing Your Work </a>
408
+ </li>
409
+ <li>
410
+ 7.5
411
+ <a href="_git_grep.html" >Searching </a>
412
+ </li>
413
+ <li>
414
+ 7.6
415
+ <a href="_removing_file_every_commit.html" >Rewriting History </a>
416
+ </li>
417
+ <li>
418
+ 7.7
419
+ <a href="_the_index.html" >Reset Demystified </a>
420
+ </li>
421
+ <li>
422
+ 7.8
423
+ <a href="_reverse_commit.html" >Advanced Merging </a>
424
+ </li>
425
+ <li>
426
+ 7.9
427
+ <a href="ref_rerere.html" >Rerere </a>
428
+ </li>
429
+ <li>
430
+ 7.10
431
+ <a href="_file_annotation.html" >Debugging with Git </a>
432
+ </li>
433
+ <li>
434
+ 7.11
435
+ <a href="_publishing_submodules.html" >Submodules </a>
436
+ </li>
437
+ <li>
438
+ 7.12
439
+ <a href="_bundling.html" >Bundling </a>
440
+ </li>
441
+ <li>
442
+ 7.13
443
+ <a href="_replace.html" >Replace </a>
444
+ </li>
445
+ <li>
446
+ 7.14
447
+ <a href="_credential_caching.html" >Credential Storage </a>
448
+ </li>
449
+ <li>
450
+ 7.15
451
+ <a href="../Git-Tools-Summary.html" >Summary </a>
452
+ </li>
453
+ </ol>
454
+ </li>
455
+ <li class='chapter'>
456
+ <h2>8. <a href="_external_merge_tools.html">Customizing Git</a></h2>
457
+ <ol>
458
+ <li>
459
+ 8.1
460
+ <a href="_external_merge_tools.html" >Git Configuration </a>
461
+ </li>
462
+ <li>
463
+ 8.2
464
+ <a href="_keyword_expansion.html" >Git Attributes </a>
465
+ </li>
466
+ <li>
467
+ 8.3
468
+ <a href="_email_hooks.html" >Git Hooks </a>
469
+ </li>
470
+ <li>
471
+ 8.4
472
+ <a href="_enforcing_commit_message_format.html" >An Example Git-Enforced Policy </a>
473
+ </li>
474
+ <li>
475
+ 8.5
476
+ <a href="../Customizing-Git-Summary.html" >Summary </a>
477
+ </li>
478
+ </ol>
479
+ </li>
480
+ <li class='chapter'>
481
+ <h2>9. <a href="_git_svn.html">Git and Other Systems</a></h2>
482
+ <ol>
483
+ <li>
484
+ 9.1
485
+ <a href="_git_svn.html" >Git as a Client </a>
486
+ </li>
487
+ <li>
488
+ 9.2
489
+ <a href="_git_p4.html" >Migrating to Git </a>
490
+ </li>
491
+ <li>
492
+ 9.3
493
+ <a href="../Git-and-Other-Systems-Summary.html" >Summary </a>
494
+ </li>
495
+ </ol>
496
+ </li>
497
+ <li class='chapter'>
498
+ <h2>10. <a href="_plumbing_porcelain.html">Git Internals</a></h2>
499
+ <ol>
500
+ <li>
501
+ 10.1
502
+ <a href="_plumbing_porcelain.html" >Plumbing and Porcelain </a>
503
+ </li>
504
+ <li>
505
+ 10.2
506
+ <a href="_git_commit_objects.html" >Git Objects </a>
507
+ </li>
508
+ <li>
509
+ 10.3
510
+ <a href="ref_the_ref.html" >Git References </a>
511
+ </li>
512
+ <li>
513
+ 10.4
514
+ <a href="../Git-Internals-Packfiles.html" >Packfiles </a>
515
+ </li>
516
+ <li>
517
+ 10.5
518
+ <a href="_pushing_refspecs.html" >The Refspec </a>
519
+ </li>
520
+ <li>
521
+ 10.6
522
+ <a href="../Git-Internals-Transfer-Protocols.html" >Transfer Protocols </a>
523
+ </li>
524
+ <li>
525
+ 10.7
526
+ <a href="_git_gc.html" >Maintenance and Data Recovery </a>
527
+ </li>
528
+ <li>
529
+ 10.8
530
+ <a href="../Git-Internals-Environment-Variables.html" >Environment Variables </a>
531
+ </li>
532
+ <li>
533
+ 10.9
534
+ <a href="../Git-Internals-Summary.html" >Summary </a>
535
+ </li>
536
+ </ol>
537
+ </li>
538
+ </ol>
539
+
540
+ </div>
541
+ <div class='column-right'>
542
+ <ol class='book-toc'>
543
+ <li class='chapter'>
544
+ <h2>A1. <a href="../Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces.html">Appendix A: Git in Other Environments</a></h2>
545
+ <ol>
546
+ <li>
547
+ A1.1
548
+ <a href="../Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces.html" >Graphical Interfaces </a>
549
+ </li>
550
+ <li>
551
+ A1.2
552
+ <a href="../Appendix-A:-Git-in-Other-Environments-Git-in-Visual-Studio.html" >Git in Visual Studio </a>
553
+ </li>
554
+ <li>
555
+ A1.3
556
+ <a href="../Appendix-A:-Git-in-Other-Environments-Git-in-Visual-Studio-Code.html" >Git in Visual Studio Code </a>
557
+ </li>
558
+ <li>
559
+ A1.4
560
+ <a href="../Appendix-A:-Git-in-Other-Environments-Git-in-IntelliJ-%252F-PyCharm-%252F-WebStorm-%252F-PhpStorm-%252F-RubyMine.html" >Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine </a>
561
+ </li>
562
+ <li>
563
+ A1.5
564
+ <a href="../Appendix-A:-Git-in-Other-Environments-Git-in-Sublime-Text.html" >Git in Sublime Text </a>
565
+ </li>
566
+ <li>
567
+ A1.6
568
+ <a href="../Appendix-A:-Git-in-Other-Environments-Git-in-Bash.html" >Git in Bash </a>
569
+ </li>
570
+ <li>
571
+ A1.7
572
+ <a href="oh_my_zsh_git.html" >Git in Zsh </a>
573
+ </li>
574
+ <li>
575
+ A1.8
576
+ <a href="../Appendix-A:-Git-in-Other-Environments-Git-in-PowerShell.html" >Git in PowerShell </a>
577
+ </li>
578
+ <li>
579
+ A1.9
580
+ <a href="../Appendix-A:-Git-in-Other-Environments-Summary.html" >Summary </a>
581
+ </li>
582
+ </ol>
583
+ </li>
584
+ <li class='chapter'>
585
+ <h2>A2. <a href="../Appendix-B:-Embedding-Git-in-your-Applications-Command-line-Git.html">Appendix B: Embedding Git in your Applications</a></h2>
586
+ <ol>
587
+ <li>
588
+ A2.1
589
+ <a href="../Appendix-B:-Embedding-Git-in-your-Applications-Command-line-Git.html" >Command-line Git </a>
590
+ </li>
591
+ <li>
592
+ A2.2
593
+ <a href="_libgit2_bindings.html" >Libgit2 </a>
594
+ </li>
595
+ <li>
596
+ A2.3
597
+ <a href="../Appendix-B:-Embedding-Git-in-your-Applications-JGit.html" >JGit </a>
598
+ </li>
599
+ <li>
600
+ A2.4
601
+ <a href="../Appendix-B:-Embedding-Git-in-your-Applications-go-git.html" >go-git </a>
602
+ </li>
603
+ <li>
604
+ A2.5
605
+ <a href="../Appendix-B:-Embedding-Git-in-your-Applications-Dulwich.html" >Dulwich </a>
606
+ </li>
607
+ </ol>
608
+ </li>
609
+ <li class='chapter'>
610
+ <h2>A3. <a href="ch_core_editor.html">Appendix C: Git Commands</a></h2>
611
+ <ol>
612
+ <li>
613
+ A3.1
614
+ <a href="ch_core_editor.html" >Setup and Config </a>
615
+ </li>
616
+ <li>
617
+ A3.2
618
+ <a href="../Appendix-C:-Git-Commands-Getting-and-Creating-Projects.html" >Getting and Creating Projects </a>
619
+ </li>
620
+ <li>
621
+ A3.3
622
+ <a href="../Appendix-C:-Git-Commands-Basic-Snapshotting.html" >Basic Snapshotting </a>
623
+ </li>
624
+ <li>
625
+ A3.4
626
+ <a href="../Appendix-C:-Git-Commands-Branching-and-Merging.html" >Branching and Merging </a>
627
+ </li>
628
+ <li>
629
+ A3.5
630
+ <a href="../Appendix-C:-Git-Commands-Sharing-and-Updating-Projects.html" >Sharing and Updating Projects </a>
631
+ </li>
632
+ <li>
633
+ A3.6
634
+ <a href="../Appendix-C:-Git-Commands-Inspection-and-Comparison.html" >Inspection and Comparison </a>
635
+ </li>
636
+ <li>
637
+ A3.7
638
+ <a href="../Appendix-C:-Git-Commands-Debugging.html" >Debugging </a>
639
+ </li>
640
+ <li>
641
+ A3.8
642
+ <a href="../Appendix-C:-Git-Commands-Patching.html" >Patching </a>
643
+ </li>
644
+ <li>
645
+ A3.9
646
+ <a href="../Appendix-C:-Git-Commands-Email.html" >Email </a>
647
+ </li>
648
+ <li>
649
+ A3.10
650
+ <a href="../Appendix-C:-Git-Commands-External-Systems.html" >External Systems </a>
651
+ </li>
652
+ <li>
653
+ A3.11
654
+ <a href="../Appendix-C:-Git-Commands-Administration.html" >Administration </a>
655
+ </li>
656
+ <li>
657
+ A3.12
658
+ <a href="../Appendix-C:-Git-Commands-Plumbing-Commands.html" >Plumbing Commands </a>
659
+ </li>
660
+ </ol>
661
+ </li>
662
+ </ol>
663
+
664
+ </div>
665
+ </div>
666
+ </div>
667
+
668
+ <span class="light" id="edition">
669
+ 2nd Edition
670
+ </span>
671
+ </div>
672
+
673
+ <div id='main' class="book edition2">
674
+ <h1>6.2 GitHub - Contributing to a Project</h1>
675
+ <div>
676
+ <h2 id="_contributing_to_a_project">Contributing to a Project</h2>
677
+ <div class="paragraph">
678
+ <p>Now that our account is set up, let’s walk through some details that could be useful in helping you contribute to an existing project.</p>
679
+ </div>
680
+ <div class="sect3">
681
+ <h3 id="_forking_projects">Forking Projects</h3>
682
+ <div class="paragraph">
683
+ <p>
684
+ If you want to contribute to an existing project to which you don’t have push access, you can “fork” the project.
685
+ When you “fork” a project, GitHub will make a copy of the project that is entirely yours; it lives in your namespace, and you can push to it.</p>
686
+ </div>
687
+ <div class="admonitionblock note">
688
+ <table>
689
+ <tr>
690
+ <td class="icon">
691
+ <div class="title">Note</div>
692
+ </td>
693
+ <td class="content">
694
+ <div class="paragraph">
695
+ <p>Historically, the term “fork” has been somewhat negative in context, meaning that someone took an open source project in a different direction, sometimes creating a competing project and splitting the contributors.
696
+ In GitHub, a “fork” is simply the same project in your own namespace, allowing you to make changes to a project publicly as a way to contribute in a more open manner.</p>
697
+ </div>
698
+ </td>
699
+ </tr>
700
+ </table>
701
+ </div>
702
+ <div class="paragraph">
703
+ <p>This way, projects don’t have to worry about adding users as collaborators to give them push access.
704
+ People can fork a project, push to it, and contribute their changes back to the original repository by creating what’s called a Pull Request, which we’ll cover next.
705
+ This opens up a discussion thread with code review, and the owner and the contributor can then communicate about the change until the owner is happy with it, at which point the owner can merge it in.</p>
706
+ </div>
707
+ <div class="paragraph">
708
+ <p>To fork a project, visit the project page and click the “Fork” button at the top-right of the page.</p>
709
+ </div>
710
+ <div class="imageblock">
711
+ <div class="content">
712
+ <img src="../images/forkbutton.png" alt="The “Fork” button">
713
+ </div>
714
+ <div class="title">Figure 88. The “Fork” button</div>
715
+ </div>
716
+ <div class="paragraph">
717
+ <p>After a few seconds, you’ll be taken to your new project page, with your own writeable copy of the code.</p>
718
+ </div>
719
+ </div>
720
+ <div class="sect3">
721
+ <h3 id="ch06-github_flow">The GitHub Flow</h3>
722
+ <div class="paragraph">
723
+ <p>
724
+ GitHub is designed around a particular collaboration workflow, centered on Pull Requests.
725
+ This flow works whether you’re collaborating with a tightly-knit team in a single shared repository, or a globally-distributed company or network of strangers contributing to a project through dozens of forks.
726
+ It is centered on the <a href="_topic_branch.html">Topic Branches</a> workflow covered in <a href="ch03-git-branching.html">Git Branching</a>.</p>
727
+ </div>
728
+ <div class="paragraph">
729
+ <p>Here’s how it generally works:</p>
730
+ </div>
731
+ <div class="olist arabic">
732
+ <ol class="arabic">
733
+ <li>
734
+ <p>Fork the project.</p>
735
+ </li>
736
+ <li>
737
+ <p>Create a topic branch from <code>master</code>.</p>
738
+ </li>
739
+ <li>
740
+ <p>Make some commits to improve the project.</p>
741
+ </li>
742
+ <li>
743
+ <p>Push this branch to your GitHub project.</p>
744
+ </li>
745
+ <li>
746
+ <p>Open a Pull Request on GitHub.</p>
747
+ </li>
748
+ <li>
749
+ <p>Discuss, and optionally continue committing.</p>
750
+ </li>
751
+ <li>
752
+ <p>The project owner merges or closes the Pull Request.</p>
753
+ </li>
754
+ <li>
755
+ <p>Sync the updated master back to your fork.</p>
756
+ </li>
757
+ </ol>
758
+ </div>
759
+ <div class="paragraph">
760
+ <p>This is basically the Integration Manager workflow covered in <a href="_integration_manager.html">Integration-Manager Workflow</a>, but instead of using email to communicate and review changes, teams use GitHub’s web based tools.</p>
761
+ </div>
762
+ <div class="paragraph">
763
+ <p>Let’s walk through an example of proposing a change to an open source project hosted on GitHub using this flow.</p>
764
+ </div>
765
+ <div class="admonitionblock tip">
766
+ <table>
767
+ <tr>
768
+ <td class="icon">
769
+ <div class="title">Tip</div>
770
+ </td>
771
+ <td class="content">
772
+ <div class="paragraph">
773
+ <p>You can use the official <strong>GitHub CLI</strong> tool instead of the GitHub web interface for most things.
774
+ The tool can be used on Windows, MacOS, and Linux systems.
775
+ Go to the <a href="https://cli.github.com/">GitHub CLI homepage</a> for installation instructions and the manual.</p>
776
+ </div>
777
+ </td>
778
+ </tr>
779
+ </table>
780
+ </div>
781
+ <div class="sect4">
782
+ <h4 id="_creating_a_pull_request">Creating a Pull Request</h4>
783
+ <div class="paragraph">
784
+ <p>Tony is looking for code to run on his Arduino programmable microcontroller and has found a great program file on GitHub at <a href="https://github.com/schacon/blink" class="bare">https://github.com/schacon/blink</a>.</p>
785
+ </div>
786
+ <div class="imageblock">
787
+ <div class="content">
788
+ <img src="../images/blink-01-start.png" alt="The project we want to contribute to">
789
+ </div>
790
+ <div class="title">Figure 89. The project we want to contribute to</div>
791
+ </div>
792
+ <div class="paragraph">
793
+ <p>The only problem is that the blinking rate is too fast.
794
+ We think it’s much nicer to wait 3 seconds instead of 1 in between each state change.
795
+ So let’s improve the program and submit it back to the project as a proposed change.</p>
796
+ </div>
797
+ <div class="paragraph">
798
+ <p>First, we click the 'Fork' button as mentioned earlier to get our own copy of the project.
799
+ Our user name here is “tonychacon” so our copy of this project is at <code><a href="https://github.com/tonychacon/blink" class="bare">https://github.com/tonychacon/blink</a></code> and that’s where we can edit it.
800
+ We will clone it locally, create a topic branch, make the code change and finally push that change back up to GitHub.</p>
801
+ </div>
802
+ <div class="listingblock">
803
+ <div class="content">
804
+ <pre class="highlight"><code class="language-console" data-lang="console">$ git clone https://github.com/tonychacon/blink <b class="conum">(1)</b>
805
+ Cloning into 'blink'...
806
+
807
+ $ cd blink
808
+ $ git checkout -b slow-blink <b class="conum">(2)</b>
809
+ Switched to a new branch 'slow-blink'
810
+
811
+ $ sed -i '' 's/1000/3000/' blink.ino (macOS) <b class="conum">(3)</b>
812
+ # If you're on a Linux system, do this instead:
813
+ # $ sed -i 's/1000/3000/' blink.ino <b class="conum">(3)</b>
814
+
815
+ $ git diff --word-diff <b class="conum">(4)</b>
816
+ diff --git a/blink.ino b/blink.ino
817
+ index 15b9911..a6cc5a5 100644
818
+ --- a/blink.ino
819
+ +++ b/blink.ino
820
+ @@ -18,7 +18,7 @@ void setup() {
821
+ // the loop routine runs over and over again forever:
822
+ void loop() {
823
+ digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
824
+ [-delay(1000);-]{+delay(3000);+} // wait for a second
825
+ digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
826
+ [-delay(1000);-]{+delay(3000);+} // wait for a second
827
+ }
828
+
829
+ $ git commit -a -m 'Change delay to 3 seconds' <b class="conum">(5)</b>
830
+ [slow-blink 5ca509d] Change delay to 3 seconds
831
+ 1 file changed, 2 insertions(+), 2 deletions(-)
832
+
833
+ $ git push origin slow-blink <b class="conum">(6)</b>
834
+ Username for 'https://github.com': tonychacon
835
+ Password for 'https://tonychacon@github.com':
836
+ Counting objects: 5, done.
837
+ Delta compression using up to 8 threads.
838
+ Compressing objects: 100% (3/3), done.
839
+ Writing objects: 100% (3/3), 340 bytes | 0 bytes/s, done.
840
+ Total 3 (delta 1), reused 0 (delta 0)
841
+ To https://github.com/tonychacon/blink
842
+ * [new branch] slow-blink -&gt; slow-blink</code></pre>
843
+ </div>
844
+ </div>
845
+ <div class="colist arabic">
846
+ <ol>
847
+ <li>
848
+ <p>Clone our fork of the project locally.</p>
849
+ </li>
850
+ <li>
851
+ <p>Create a descriptive topic branch.</p>
852
+ </li>
853
+ <li>
854
+ <p>Make our change to the code.</p>
855
+ </li>
856
+ <li>
857
+ <p>Check that the change is good.</p>
858
+ </li>
859
+ <li>
860
+ <p>Commit our change to the topic branch.</p>
861
+ </li>
862
+ <li>
863
+ <p>Push our new topic branch back up to our GitHub fork.</p>
864
+ </li>
865
+ </ol>
866
+ </div>
867
+ <div class="paragraph">
868
+ <p>Now if we go back to our fork on GitHub, we can see that GitHub noticed that we pushed a new topic branch up and presents us with a big green button to check out our changes and open a Pull Request to the original project.</p>
869
+ </div>
870
+ <div class="paragraph">
871
+ <p>You can alternatively go to the “Branches” page at <code>https://github.com/&lt;user&gt;/&lt;project&gt;/branches</code> to locate your branch and open a new Pull Request from there.</p>
872
+ </div>
873
+ <div class="imageblock">
874
+ <div class="content">
875
+ <img src="../images/blink-02-pr.png" alt="Pull Request button">
876
+ </div>
877
+ <div class="title">Figure 90. Pull Request button</div>
878
+ </div>
879
+ <div class="paragraph">
880
+ <p>
881
+ If we click that green button, we’ll see a screen that asks us to give our Pull Request a title and description.
882
+ It is almost always worthwhile to put some effort into this, since a good description helps the owner of the original project determine what you were trying to do, whether your proposed changes are correct, and whether accepting the changes would improve the original project.</p>
883
+ </div>
884
+ <div class="paragraph">
885
+ <p>We also see a list of the commits in our topic branch that are “ahead” of the <code>master</code> branch (in this case, just the one) and a unified diff of all the changes that will be made should this branch get merged by the project owner.</p>
886
+ </div>
887
+ <div class="imageblock">
888
+ <div class="content">
889
+ <img src="../images/blink-03-pull-request-open.png" alt="Pull Request creation">
890
+ </div>
891
+ <div class="title">Figure 91. Pull Request creation page</div>
892
+ </div>
893
+ <div class="paragraph">
894
+ <p>When you hit the 'Create pull request' button on this screen, the owner of the project you forked will get a notification that someone is suggesting a change and will link to a page that has all of this information on it.</p>
895
+ </div>
896
+ <div class="admonitionblock note">
897
+ <table>
898
+ <tr>
899
+ <td class="icon">
900
+ <div class="title">Note</div>
901
+ </td>
902
+ <td class="content">
903
+ <div class="paragraph">
904
+ <p>Though Pull Requests are used commonly for public projects like this when the contributor has a complete change ready to be made, it’s also often used in internal projects <em>at the beginning</em> of the development cycle.
905
+ Since you can keep pushing to the topic branch even <strong>after</strong> the Pull Request is opened, it’s often opened early and used as a way to iterate on work as a team within a context, rather than opened at the very end of the process.</p>
906
+ </div>
907
+ </td>
908
+ </tr>
909
+ </table>
910
+ </div>
911
+ </div>
912
+ <div class="sect4">
913
+ <h4 id="_iterating_on_a_pull_request">Iterating on a Pull Request</h4>
914
+ <div class="paragraph">
915
+ <p>At this point, the project owner can look at the suggested change and merge it, reject it or comment on it.
916
+ Let’s say that he likes the idea, but would prefer a slightly longer time for the light to be off than on.</p>
917
+ </div>
918
+ <div class="paragraph">
919
+ <p>Where this conversation may take place over email in the workflows presented in <a href="ch05-distributed-git.html">Distributed Git</a>, on GitHub this happens online.
920
+ The project owner can review the unified diff and leave a comment by clicking on any of the lines.</p>
921
+ </div>
922
+ <div class="imageblock">
923
+ <div class="content">
924
+ <img src="../images/blink-04-pr-comment.png" alt="PR line comment">
925
+ </div>
926
+ <div class="title">Figure 92. Comment on a specific line of code in a Pull Request</div>
927
+ </div>
928
+ <div class="paragraph">
929
+ <p>Once the maintainer makes this comment, the person who opened the Pull Request (and indeed, anyone else watching the repository) will get a notification.
930
+ We’ll go over customizing this later, but if he had email notifications turned on, Tony would get an email like this:</p>
931
+ </div>
932
+ <div id="_email_notification" class="imageblock">
933
+ <div class="content">
934
+ <img src="../images/blink-04-email.png" alt="Email notification">
935
+ </div>
936
+ <div class="title">Figure 93. Comments sent as email notifications</div>
937
+ </div>
938
+ <div class="paragraph">
939
+ <p>Anyone can also leave general comments on the Pull Request.
940
+ In <a href="_pr_discussion.html">Pull Request discussion page</a> we can see an example of the project owner both commenting on a line of code and then leaving a general comment in the discussion section.
941
+ You can see that the code comments are brought into the conversation as well.</p>
942
+ </div>
943
+ <div id="_pr_discussion" class="imageblock">
944
+ <div class="content">
945
+ <img src="../images/blink-05-general-comment.png" alt="PR discussion page">
946
+ </div>
947
+ <div class="title">Figure 94. Pull Request discussion page</div>
948
+ </div>
949
+ <div class="paragraph">
950
+ <p>Now the contributor can see what they need to do in order to get their change accepted.
951
+ Luckily this is very straightforward.
952
+ Where over email you may have to re-roll your series and resubmit it to the mailing list, with GitHub you simply commit to the topic branch again and push, which will automatically update the Pull Request.
953
+ In <a href="_pr_final.html">Pull Request final</a> you can also see that the old code comment has been collapsed in the updated Pull Request, since it was made on a line that has since been changed.</p>
954
+ </div>
955
+ <div class="paragraph">
956
+ <p>Adding commits to an existing Pull Request doesn’t trigger a notification, so once Tony has pushed his corrections he decides to leave a comment to inform the project owner that he made the requested change.</p>
957
+ </div>
958
+ <div id="_pr_final" class="imageblock">
959
+ <div class="content">
960
+ <img src="../images/blink-06-final.png" alt="PR final">
961
+ </div>
962
+ <div class="title">Figure 95. Pull Request final</div>
963
+ </div>
964
+ <div class="paragraph">
965
+ <p>An interesting thing to notice is that if you click on the “Files Changed” tab on this Pull Request, you’ll get the “unified” diff — that is, the total aggregate difference that would be introduced to your main branch if this topic branch was merged in.
966
+ In <code>git diff</code> terms, it basically automatically shows you <code>git diff master…​&lt;branch&gt;</code> for the branch this Pull Request is based on.
967
+ See <a href="_what_is_introduced.html">Determining What Is Introduced</a> for more about this type of diff.</p>
968
+ </div>
969
+ <div class="paragraph">
970
+ <p>The other thing you’ll notice is that GitHub checks to see if the Pull Request merges cleanly and provides a button to do the merge for you on the server.
971
+ This button only shows up if you have write access to the repository and a trivial merge is possible.
972
+ If you click it GitHub will perform a “non-fast-forward” merge, meaning that even if the merge <strong>could</strong> be a fast-forward, it will still create a merge commit.</p>
973
+ </div>
974
+ <div class="paragraph">
975
+ <p>If you would prefer, you can simply pull the branch down and merge it locally.
976
+ If you merge this branch into the <code>master</code> branch and push it to GitHub, the Pull Request will automatically be closed.</p>
977
+ </div>
978
+ <div class="paragraph">
979
+ <p>This is the basic workflow that most GitHub projects use.
980
+ Topic branches are created, Pull Requests are opened on them, a discussion ensues, possibly more work is done on the branch and eventually the request is either closed or merged.</p>
981
+ </div>
982
+ <div class="admonitionblock note">
983
+ <table>
984
+ <tr>
985
+ <td class="icon">
986
+ <div class="title">Note</div>
987
+ </td>
988
+ <td class="content">
989
+ <div class="title">Not Only Forks</div>
990
+ <div class="paragraph">
991
+ <p>It’s important to note that you can also open a Pull Request between two branches in the same repository.
992
+ If you’re working on a feature with someone and you both have write access to the project, you can push a topic branch to the repository and open a Pull Request on it to the <code>master</code> branch of that same project to initiate the code review and discussion process.
993
+ No forking necessary.</p>
994
+ </div>
995
+ </td>
996
+ </tr>
997
+ </table>
998
+ </div>
999
+ </div>
1000
+ </div>
1001
+ <div class="sect3">
1002
+ <h3 id="_advanced_pull_requests">Advanced Pull Requests</h3>
1003
+ <div class="paragraph">
1004
+ <p>Now that we’ve covered the basics of contributing to a project on GitHub, let’s cover a few interesting tips and tricks about Pull Requests so you can be more effective in using them.</p>
1005
+ </div>
1006
+ <div class="sect4">
1007
+ <h4 id="_pull_requests_as_patches">Pull Requests as Patches</h4>
1008
+ <div class="paragraph">
1009
+ <p>It’s important to understand that many projects don’t really think of Pull Requests as queues of perfect patches that should apply cleanly in order, as most mailing list-based projects think of patch series contributions.
1010
+ Most GitHub projects think about Pull Request branches as iterative conversations around a proposed change, culminating in a unified diff that is applied by merging.</p>
1011
+ </div>
1012
+ <div class="paragraph">
1013
+ <p>This is an important distinction, because generally the change is suggested before the code is thought to be perfect, which is far more rare with mailing list based patch series contributions.
1014
+ This enables an earlier conversation with the maintainers so that arriving at the proper solution is more of a community effort.
1015
+ When code is proposed with a Pull Request and the maintainers or community suggest a change, the patch series is generally not re-rolled, but instead the difference is pushed as a new commit to the branch, moving the conversation forward with the context of the previous work intact.</p>
1016
+ </div>
1017
+ <div class="paragraph">
1018
+ <p>For instance, if you go back and look again at <a href="_pr_final.html">Pull Request final</a>, you’ll notice that the contributor did not rebase his commit and send another Pull Request.
1019
+ Instead they added new commits and pushed them to the existing branch.
1020
+ This way if you go back and look at this Pull Request in the future, you can easily find all of the context of why decisions were made.
1021
+ Pushing the “Merge” button on the site purposefully creates a merge commit that references the Pull Request so that it’s easy to go back and research the original conversation if necessary.</p>
1022
+ </div>
1023
+ </div>
1024
+ <div class="sect4">
1025
+ <h4 id="_keeping_up_with_upstream">Keeping up with Upstream</h4>
1026
+ <div class="paragraph">
1027
+ <p>If your Pull Request becomes out of date or otherwise doesn’t merge cleanly, you will want to fix it so the maintainer can easily merge it.
1028
+ GitHub will test this for you and let you know at the bottom of every Pull Request if the merge is trivial or not.</p>
1029
+ </div>
1030
+ <div id="_pr_fail" class="imageblock">
1031
+ <div class="content">
1032
+ <img src="../images/pr-01-fail.png" alt="PR merge failure">
1033
+ </div>
1034
+ <div class="title">Figure 96. Pull Request does not merge cleanly</div>
1035
+ </div>
1036
+ <div class="paragraph">
1037
+ <p>If you see something like <a href="_pr_fail.html">Pull Request does not merge cleanly</a>, you’ll want to fix your branch so that it turns green and the maintainer doesn’t have to do extra work.</p>
1038
+ </div>
1039
+ <div class="paragraph">
1040
+ <p>You have two main options in order to do this.
1041
+ You can either rebase your branch on top of whatever the target branch is (normally the <code>master</code> branch of the repository you forked), or you can merge the target branch into your branch.</p>
1042
+ </div>
1043
+ <div class="paragraph">
1044
+ <p>Most developers on GitHub will choose to do the latter, for the same reasons we just went over in the previous section.
1045
+ What matters is the history and the final merge, so rebasing isn’t getting you much other than a slightly cleaner history and in return is <strong>far</strong> more difficult and error prone.</p>
1046
+ </div>
1047
+ <div class="paragraph">
1048
+ <p>If you want to merge in the target branch to make your Pull Request mergeable, you would add the original repository as a new remote, fetch from it, merge the main branch of that repository into your topic branch, fix any issues and finally push it back up to the same branch you opened the Pull Request on.</p>
1049
+ </div>
1050
+ <div class="paragraph">
1051
+ <p>For example, let’s say that in the “tonychacon” example we were using before, the original author made a change that would create a conflict in the Pull Request.
1052
+ Let’s go through those steps.</p>
1053
+ </div>
1054
+ <div class="listingblock">
1055
+ <div class="content">
1056
+ <pre class="highlight"><code class="language-console" data-lang="console">$ git remote add upstream https://github.com/schacon/blink <b class="conum">(1)</b>
1057
+
1058
+ $ git fetch upstream <b class="conum">(2)</b>
1059
+ remote: Counting objects: 3, done.
1060
+ remote: Compressing objects: 100% (3/3), done.
1061
+ Unpacking objects: 100% (3/3), done.
1062
+ remote: Total 3 (delta 0), reused 0 (delta 0)
1063
+ From https://github.com/schacon/blink
1064
+ * [new branch] master -&gt; upstream/master
1065
+
1066
+ $ git merge upstream/master <b class="conum">(3)</b>
1067
+ Auto-merging blink.ino
1068
+ CONFLICT (content): Merge conflict in blink.ino
1069
+ Automatic merge failed; fix conflicts and then commit the result.
1070
+
1071
+ $ vim blink.ino <b class="conum">(4)</b>
1072
+ $ git add blink.ino
1073
+ $ git commit
1074
+ [slow-blink 3c8d735] Merge remote-tracking branch 'upstream/master' \
1075
+ into slower-blink
1076
+
1077
+ $ git push origin slow-blink <b class="conum">(5)</b>
1078
+ Counting objects: 6, done.
1079
+ Delta compression using up to 8 threads.
1080
+ Compressing objects: 100% (6/6), done.
1081
+ Writing objects: 100% (6/6), 682 bytes | 0 bytes/s, done.
1082
+ Total 6 (delta 2), reused 0 (delta 0)
1083
+ To https://github.com/tonychacon/blink
1084
+ ef4725c..3c8d735 slower-blink -&gt; slow-blink</code></pre>
1085
+ </div>
1086
+ </div>
1087
+ <div class="colist arabic">
1088
+ <ol>
1089
+ <li>
1090
+ <p>Add the original repository as a remote named <code>upstream</code>.</p>
1091
+ </li>
1092
+ <li>
1093
+ <p>Fetch the newest work from that remote.</p>
1094
+ </li>
1095
+ <li>
1096
+ <p>Merge the main branch of that repository into your topic branch.</p>
1097
+ </li>
1098
+ <li>
1099
+ <p>Fix the conflict that occurred.</p>
1100
+ </li>
1101
+ <li>
1102
+ <p>Push back up to the same topic branch.</p>
1103
+ </li>
1104
+ </ol>
1105
+ </div>
1106
+ <div class="paragraph">
1107
+ <p>Once you do that, the Pull Request will be automatically updated and re-checked to see if it merges cleanly.</p>
1108
+ </div>
1109
+ <div id="_pr_merge_fix" class="imageblock">
1110
+ <div class="content">
1111
+ <img src="../images/pr-02-merge-fix.png" alt="PR fixed">
1112
+ </div>
1113
+ <div class="title">Figure 97. Pull Request now merges cleanly</div>
1114
+ </div>
1115
+ <div class="paragraph">
1116
+ <p>One of the great things about Git is that you can do that continuously.
1117
+ If you have a very long-running project, you can easily merge from the target branch over and over again and only have to deal with conflicts that have arisen since the last time that you merged, making the process very manageable.</p>
1118
+ </div>
1119
+ <div class="paragraph">
1120
+ <p>If you absolutely wish to rebase the branch to clean it up, you can certainly do so, but it is highly encouraged to not force push over the branch that the Pull Request is already opened on.
1121
+ If other people have pulled it down and done more work on it, you run into all of the issues outlined in <a href="_rebase_peril.html">The Perils of Rebasing</a>.
1122
+ Instead, push the rebased branch to a new branch on GitHub and open a brand new Pull Request referencing the old one, then close the original.</p>
1123
+ </div>
1124
+ </div>
1125
+ <div class="sect4">
1126
+ <h4 id="_references">References</h4>
1127
+ <div class="paragraph">
1128
+ <p>Your next question may be “How do I reference the old Pull Request?”.
1129
+ It turns out there are many, many ways to reference other things almost anywhere you can write in GitHub.</p>
1130
+ </div>
1131
+ <div class="paragraph">
1132
+ <p>Let’s start with how to cross-reference another Pull Request or an Issue.
1133
+ All Pull Requests and Issues are assigned numbers and they are unique within the project.
1134
+ For example, you can’t have Pull Request #3 <em>and</em> Issue #3.
1135
+ If you want to reference any Pull Request or Issue from any other one, you can simply put <code>#&lt;num&gt;</code> in any comment or description.
1136
+ You can also be more specific if the Issue or Pull request lives somewhere else; write <code>username#&lt;num&gt;</code> if you’re referring to an Issue or Pull Request in a fork of the repository you’re in, or <code>username/repo#&lt;num&gt;</code> to reference something in another repository.</p>
1137
+ </div>
1138
+ <div class="paragraph">
1139
+ <p>Let’s look at an example.
1140
+ Say we rebased the branch in the previous example, created a new pull request for it, and now we want to reference the old pull request from the new one.
1141
+ We also want to reference an issue in the fork of the repository and an issue in a completely different project.
1142
+ We can fill out the description just like <a href="_pr_references.html">Cross references in a Pull Request</a>.</p>
1143
+ </div>
1144
+ <div id="_pr_references" class="imageblock">
1145
+ <div class="content">
1146
+ <img src="../images/mentions-01-syntax.png" alt="PR references">
1147
+ </div>
1148
+ <div class="title">Figure 98. Cross references in a Pull Request</div>
1149
+ </div>
1150
+ <div class="paragraph">
1151
+ <p>When we submit this pull request, we’ll see all of that rendered like <a href="_pr_references_render.html">Cross references rendered in a Pull Request</a>.</p>
1152
+ </div>
1153
+ <div id="_pr_references_render" class="imageblock">
1154
+ <div class="content">
1155
+ <img src="../images/mentions-02-render.png" alt="PR references rendered">
1156
+ </div>
1157
+ <div class="title">Figure 99. Cross references rendered in a Pull Request</div>
1158
+ </div>
1159
+ <div class="paragraph">
1160
+ <p>Notice that the full GitHub URL we put in there was shortened to just the information needed.</p>
1161
+ </div>
1162
+ <div class="paragraph">
1163
+ <p>Now if Tony goes back and closes out the original Pull Request, we can see that by mentioning it in the new one, GitHub has automatically created a trackback event in the Pull Request timeline.
1164
+ This means that anyone who visits this Pull Request and sees that it is closed can easily link back to the one that superseded it.
1165
+ The link will look something like <a href="_pr_closed.html">Link back to the new Pull Request in the closed Pull Request timeline</a>.</p>
1166
+ </div>
1167
+ <div id="_pr_closed" class="imageblock">
1168
+ <div class="content">
1169
+ <img src="../images/mentions-03-closed.png" alt="PR closed">
1170
+ </div>
1171
+ <div class="title">Figure 100. Link back to the new Pull Request in the closed Pull Request timeline</div>
1172
+ </div>
1173
+ <div class="paragraph">
1174
+ <p>In addition to issue numbers, you can also reference a specific commit by SHA-1.
1175
+ You have to specify a full 40 character SHA-1, but if GitHub sees that in a comment, it will link directly to the commit.
1176
+ Again, you can reference commits in forks or other repositories in the same way you did with issues.</p>
1177
+ </div>
1178
+ </div>
1179
+ </div>
1180
+ <div class="sect3">
1181
+ <h3 id="_github_flavored_markdown">GitHub Flavored Markdown</h3>
1182
+ <div class="paragraph">
1183
+ <p>Linking to other Issues is just the beginning of interesting things you can do with almost any text box on GitHub.
1184
+ In Issue and Pull Request descriptions, comments, code comments and more, you can use what is called “GitHub Flavored Markdown”.
1185
+ Markdown is like writing in plain text but which is rendered richly.</p>
1186
+ </div>
1187
+ <div class="paragraph">
1188
+ <p>See <a href="_example_markdown.html">An example of GitHub Flavored Markdown as written and as rendered</a> for an example of how comments or text can be written and then rendered using Markdown.</p>
1189
+ </div>
1190
+ <div id="_example_markdown" class="imageblock">
1191
+ <div class="content">
1192
+ <img src="../images/markdown-01-example.png" alt="Example Markdown">
1193
+ </div>
1194
+ <div class="title">Figure 101. An example of GitHub Flavored Markdown as written and as rendered</div>
1195
+ </div>
1196
+ <div class="paragraph">
1197
+ <p>The GitHub flavor of Markdown adds more things you can do beyond the basic Markdown syntax.
1198
+ These can all be really useful when creating useful Pull Request or Issue comments or descriptions.</p>
1199
+ </div>
1200
+ <div class="sect4">
1201
+ <h4 id="_task_lists">Task Lists</h4>
1202
+ <div class="paragraph">
1203
+ <p>The first really useful GitHub specific Markdown feature, especially for use in Pull Requests, is the Task List.
1204
+ A task list is a list of checkboxes of things you want to get done.
1205
+ Putting them into an Issue or Pull Request normally indicates things that you want to get done before you consider the item complete.</p>
1206
+ </div>
1207
+ <div class="paragraph">
1208
+ <p>You can create a task list like this:</p>
1209
+ </div>
1210
+ <div class="listingblock">
1211
+ <div class="content">
1212
+ <pre class="highlight"><code class="language-text" data-lang="text">- [X] Write the code
1213
+ - [ ] Write all the tests
1214
+ - [ ] Document the code</code></pre>
1215
+ </div>
1216
+ </div>
1217
+ <div class="paragraph">
1218
+ <p>If we include this in the description of our Pull Request or Issue, we’ll see it rendered like <a href="_eg_task_lists.html">Task lists rendered in a Markdown comment</a>.</p>
1219
+ </div>
1220
+ <div id="_eg_task_lists" class="imageblock">
1221
+ <div class="content">
1222
+ <img src="../images/markdown-02-tasks.png" alt="Example Task List">
1223
+ </div>
1224
+ <div class="title">Figure 102. Task lists rendered in a Markdown comment</div>
1225
+ </div>
1226
+ <div class="paragraph">
1227
+ <p>This is often used in Pull Requests to indicate what all you would like to get done on the branch before the Pull Request will be ready to merge.
1228
+ The really cool part is that you can simply click the checkboxes to update the comment — you don’t have to edit the Markdown directly to check tasks off.</p>
1229
+ </div>
1230
+ <div class="paragraph">
1231
+ <p>What’s more, GitHub will look for task lists in your Issues and Pull Requests and show them as metadata on the pages that list them out.
1232
+ For example, if you have a Pull Request with tasks and you look at the overview page of all Pull Requests, you can see how far done it is.
1233
+ This helps people break down Pull Requests into subtasks and helps other people track the progress of the branch.
1234
+ You can see an example of this in <a href="_task_list_progress.html">Task list summary in the Pull Request list</a>.</p>
1235
+ </div>
1236
+ <div id="_task_list_progress" class="imageblock">
1237
+ <div class="content">
1238
+ <img src="../images/markdown-03-task-summary.png" alt="Example Task List">
1239
+ </div>
1240
+ <div class="title">Figure 103. Task list summary in the Pull Request list</div>
1241
+ </div>
1242
+ <div class="paragraph">
1243
+ <p>These are incredibly useful when you open a Pull Request early and use it to track your progress through the implementation of the feature.</p>
1244
+ </div>
1245
+ </div>
1246
+ <div class="sect4">
1247
+ <h4 id="_code_snippets">Code Snippets</h4>
1248
+ <div class="paragraph">
1249
+ <p>You can also add code snippets to comments.
1250
+ This is especially useful if you want to present something that you <em>could</em> try to do before actually implementing it as a commit on your branch.
1251
+ This is also often used to add example code of what is not working or what this Pull Request could implement.</p>
1252
+ </div>
1253
+ <div class="paragraph">
1254
+ <p>To add a snippet of code you have to “fence” it in backticks.</p>
1255
+ </div>
1256
+ <div class="listingblock">
1257
+ <div class="content">
1258
+ <pre class="highlight"><code class="language-text" data-lang="text">```java
1259
+ for(int i=0 ; i &lt; 5 ; i++)
1260
+ {
1261
+ System.out.println("i is : " + i);
1262
+ }
1263
+ ```</code></pre>
1264
+ </div>
1265
+ </div>
1266
+ <div class="paragraph">
1267
+ <p>If you add a language name like we did there with 'java', GitHub will also try to syntax highlight the snippet.
1268
+ In the case of the above example, it would end up rendering like <a href="_md_code.html">Rendered fenced code example</a>.</p>
1269
+ </div>
1270
+ <div id="_md_code" class="imageblock">
1271
+ <div class="content">
1272
+ <img src="../images/markdown-04-fenced-code.png" alt="Rendered fenced code">
1273
+ </div>
1274
+ <div class="title">Figure 104. Rendered fenced code example</div>
1275
+ </div>
1276
+ </div>
1277
+ <div class="sect4">
1278
+ <h4 id="_quoting">Quoting</h4>
1279
+ <div class="paragraph">
1280
+ <p>If you’re responding to a small part of a long comment, you can selectively quote out of the other comment by preceding the lines with the <code>&gt;</code> character.
1281
+ In fact, this is so common and so useful that there is a keyboard shortcut for it.
1282
+ If you highlight text in a comment that you want to directly reply to and hit the <code>r</code> key, it will quote that text in the comment box for you.</p>
1283
+ </div>
1284
+ <div class="paragraph">
1285
+ <p>The quotes look something like this:</p>
1286
+ </div>
1287
+ <div class="listingblock">
1288
+ <div class="content">
1289
+ <pre class="highlight"><code class="language-text" data-lang="text">&gt; Whether 'tis Nobler in the mind to suffer
1290
+ &gt; The Slings and Arrows of outrageous Fortune,
1291
+
1292
+ How big are these slings and in particular, these arrows?</code></pre>
1293
+ </div>
1294
+ </div>
1295
+ <div class="paragraph">
1296
+ <p>Once rendered, the comment will look like <a href="_md_quote.html">Rendered quoting example</a>.</p>
1297
+ </div>
1298
+ <div id="_md_quote" class="imageblock">
1299
+ <div class="content">
1300
+ <img src="../images/markdown-05-quote.png" alt="Rendered quoting">
1301
+ </div>
1302
+ <div class="title">Figure 105. Rendered quoting example</div>
1303
+ </div>
1304
+ </div>
1305
+ <div class="sect4">
1306
+ <h4 id="_emoji">Emoji</h4>
1307
+ <div class="paragraph">
1308
+ <p>Finally, you can also use emoji in your comments.
1309
+ This is actually used quite extensively in comments you see on many GitHub Issues and Pull Requests.
1310
+ There is even an emoji helper in GitHub.
1311
+ If you are typing a comment and you start with a <code>:</code> character, an autocompleter will help you find what you’re looking for.</p>
1312
+ </div>
1313
+ <div id="_md_emoji_auto" class="imageblock">
1314
+ <div class="content">
1315
+ <img src="../images/markdown-06-emoji-complete.png" alt="Emoji autocompleter">
1316
+ </div>
1317
+ <div class="title">Figure 106. Emoji autocompleter in action</div>
1318
+ </div>
1319
+ <div class="paragraph">
1320
+ <p>Emojis take the form of <code>:&lt;name&gt;:</code> anywhere in the comment.
1321
+ For instance, you could write something like this:</p>
1322
+ </div>
1323
+ <div class="listingblock">
1324
+ <div class="content">
1325
+ <pre class="highlight"><code class="language-text" data-lang="text">I :eyes: that :bug: and I :cold_sweat:.
1326
+
1327
+ :trophy: for :microscope: it.
1328
+
1329
+ :+1: and :sparkles: on this :ship:, it's :fire::poop:!
1330
+
1331
+ :clap::tada::panda_face:</code></pre>
1332
+ </div>
1333
+ </div>
1334
+ <div class="paragraph">
1335
+ <p>When rendered, it would look something like <a href="_md_emoji.html">Heavy emoji commenting</a>.</p>
1336
+ </div>
1337
+ <div id="_md_emoji" class="imageblock">
1338
+ <div class="content">
1339
+ <img src="../images/markdown-07-emoji.png" alt="Emoji">
1340
+ </div>
1341
+ <div class="title">Figure 107. Heavy emoji commenting</div>
1342
+ </div>
1343
+ <div class="paragraph">
1344
+ <p>Not that this is incredibly useful, but it does add an element of fun and emotion to a medium that is otherwise hard to convey emotion in.</p>
1345
+ </div>
1346
+ <div class="admonitionblock note">
1347
+ <table>
1348
+ <tr>
1349
+ <td class="icon">
1350
+ <div class="title">Note</div>
1351
+ </td>
1352
+ <td class="content">
1353
+ <div class="paragraph">
1354
+ <p>There are actually quite a number of web services that make use of emoji characters these days.
1355
+ A great cheat sheet to reference to find emoji that expresses what you want to say can be found at:</p>
1356
+ </div>
1357
+ <div class="paragraph">
1358
+ <p><a href="https://www.webfx.com/tools/emoji-cheat-sheet/" class="bare">https://www.webfx.com/tools/emoji-cheat-sheet/</a></p>
1359
+ </div>
1360
+ </td>
1361
+ </tr>
1362
+ </table>
1363
+ </div>
1364
+ </div>
1365
+ <div class="sect4">
1366
+ <h4 id="_images">Images</h4>
1367
+ <div class="paragraph">
1368
+ <p>This isn’t technically GitHub Flavored Markdown, but it is incredibly useful.
1369
+ In addition to adding Markdown image links to comments, which can be difficult to find and embed URLs for, GitHub allows you to drag and drop images into text areas to embed them.</p>
1370
+ </div>
1371
+ <div id="_md_drag" class="imageblock">
1372
+ <div class="content">
1373
+ <img src="../images/markdown-08-drag-drop.png" alt="Drag and drop images">
1374
+ </div>
1375
+ <div class="title">Figure 108. Drag and drop images to upload them and auto-embed them</div>
1376
+ </div>
1377
+ <div class="paragraph">
1378
+ <p>If you look at <a href="_md_drag.html">Drag and drop images to upload them and auto-embed them</a>, you can see a small “Parsed as Markdown” hint above the text area.
1379
+ Clicking on that will give you a full cheat sheet of everything you can do with Markdown on GitHub.</p>
1380
+ </div>
1381
+ </div>
1382
+ </div>
1383
+ <div class="sect3">
1384
+ <h3 id="_fetch_and_push_on_different_repositories">Keep your GitHub public repository up-to-date</h3>
1385
+ <div class="paragraph">
1386
+ <p>Once you’ve forked a GitHub repository, your repository (your "fork") exists independently from the original.
1387
+ In particular, when the original repository has new commits, GitHub informs you by a message like:</p>
1388
+ </div>
1389
+ <div class="listingblock">
1390
+ <div class="content">
1391
+ <pre class="highlight"><code class="language-text" data-lang="text">This branch is 5 commits behind progit:master.</code></pre>
1392
+ </div>
1393
+ </div>
1394
+ <div class="paragraph">
1395
+ <p>But your GitHub repository will never be automatically updated by GitHub; this is something that you must do yourself.
1396
+ Fortunately, this is very easy to do.</p>
1397
+ </div>
1398
+ <div class="paragraph">
1399
+ <p>One possibility to do this requires no configuration.
1400
+ For example, if you forked from <code><a href="https://github.com/progit/progit2.git" class="bare">https://github.com/progit/progit2.git</a></code>, you can keep your <code>master</code> branch up-to-date like this:</p>
1401
+ </div>
1402
+ <div class="listingblock">
1403
+ <div class="content">
1404
+ <pre class="highlight"><code class="language-console" data-lang="console">$ git checkout master <b class="conum">(1)</b>
1405
+ $ git pull https://github.com/progit/progit2.git <b class="conum">(2)</b>
1406
+ $ git push origin master <b class="conum">(3)</b></code></pre>
1407
+ </div>
1408
+ </div>
1409
+ <div class="colist arabic">
1410
+ <ol>
1411
+ <li>
1412
+ <p>If you were on another branch, return to <code>master</code>.</p>
1413
+ </li>
1414
+ <li>
1415
+ <p>Fetch changes from <code><a href="https://github.com/progit/progit2.git" class="bare">https://github.com/progit/progit2.git</a></code> and merge them into <code>master</code>.</p>
1416
+ </li>
1417
+ <li>
1418
+ <p>Push your <code>master</code> branch to <code>origin</code>.</p>
1419
+ </li>
1420
+ </ol>
1421
+ </div>
1422
+ <div class="paragraph">
1423
+ <p>This works, but it is a little tedious having to spell out the fetch URL every time.
1424
+ You can automate this work with a bit of configuration:</p>
1425
+ </div>
1426
+ <div class="listingblock">
1427
+ <div class="content">
1428
+ <pre class="highlight"><code class="language-console" data-lang="console">$ git remote add progit https://github.com/progit/progit2.git <b class="conum">(1)</b>
1429
+ $ git fetch progit <b class="conum">(2)</b>
1430
+ $ git branch --set-upstream-to=progit/master master <b class="conum">(3)</b>
1431
+ $ git config --local remote.pushDefault origin <b class="conum">(4)</b></code></pre>
1432
+ </div>
1433
+ </div>
1434
+ <div class="colist arabic">
1435
+ <ol>
1436
+ <li>
1437
+ <p>Add the source repository and give it a name.
1438
+ Here, I have chosen to call it <code>progit</code>.</p>
1439
+ </li>
1440
+ <li>
1441
+ <p>Get a reference on progit’s branches, in particular <code>master</code>.</p>
1442
+ </li>
1443
+ <li>
1444
+ <p>Set your <code>master</code> branch to fetch from the <code>progit</code> remote.</p>
1445
+ </li>
1446
+ <li>
1447
+ <p>Define the default push repository to <code>origin</code>.</p>
1448
+ </li>
1449
+ </ol>
1450
+ </div>
1451
+ <div class="paragraph">
1452
+ <p>Once this is done, the workflow becomes much simpler:</p>
1453
+ </div>
1454
+ <div class="listingblock">
1455
+ <div class="content">
1456
+ <pre class="highlight"><code class="language-console" data-lang="console">$ git checkout master <b class="conum">(1)</b>
1457
+ $ git pull <b class="conum">(2)</b>
1458
+ $ git push <b class="conum">(3)</b></code></pre>
1459
+ </div>
1460
+ </div>
1461
+ <div class="colist arabic">
1462
+ <ol>
1463
+ <li>
1464
+ <p>If you were on another branch, return to <code>master</code>.</p>
1465
+ </li>
1466
+ <li>
1467
+ <p>Fetch changes from <code>progit</code> and merge changes into <code>master</code>.</p>
1468
+ </li>
1469
+ <li>
1470
+ <p>Push your <code>master</code> branch to <code>origin</code>.</p>
1471
+ </li>
1472
+ </ol>
1473
+ </div>
1474
+ <div class="paragraph">
1475
+ <p>This approach can be useful, but it’s not without downsides.
1476
+ Git will happily do this work for you silently, but it won’t warn you if you make a commit to <code>master</code>, pull from <code>progit</code>, then push to <code>origin</code> — all of those operations are valid with this setup.
1477
+ So you’ll have to take care never to commit directly to <code>master</code>, since that branch effectively belongs to the upstream repository.</p>
1478
+ </div>
1479
+ </div>
1480
+ <div id="nav"><a href="_personal_avatar.html">prev</a> | <a href="_email_notifications.html">next</a></div></div>
1481
+ </div>
1482
+
1483
+ </div>
1484
+ </div>
1485
+ <footer>
1486
+ <div class="site-source">
1487
+ <a href="https://git-scm.com/site">About this site</a><br>
1488
+ Patches, suggestions, and comments are welcome.
1489
+ </div>
1490
+ <div class="sfc-member">
1491
+ Git is a member of <a href="https://git-scm.com/sfc">Software Freedom Conservancy</a>
1492
+ </div>
1493
+ </footer>
1494
+ <a href="_fetch_and_push_on_different_repositories.html#top" class="no-js scrollToTop" id="scrollToTop" data-label="Scroll to top">
1495
+ <img src="../../../../images/icons/chevron-up@2x.png" width="20" height="20" alt="scroll-to-top"/>
1496
+ </a>
1497
+ <script src="../../../../assets/application-38b0d42ff05ffea45841edebbd14b75b89585646153808e82907c2c5c11f324b.js"></script>
1498
+
1499
+ </div>
1500
+
1501
+ </body>
1502
+ </html>