wayfarer 0.4.7 → 0.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.env +17 -0
- data/.github/workflows/lint.yaml +8 -6
- data/.github/workflows/release.yaml +2 -3
- data/.github/workflows/tests.yaml +5 -14
- data/.gitignore +2 -2
- data/.rubocop.yml +31 -0
- data/.vale.ini +6 -3
- data/Dockerfile +3 -2
- data/Gemfile +21 -0
- data/Gemfile.lock +233 -128
- data/Rakefile +7 -0
- data/docker-compose.yml +13 -14
- data/docs/guides/callbacks.md +3 -1
- data/docs/guides/configuration.md +10 -35
- data/docs/guides/development.md +67 -0
- data/docs/guides/handlers.md +7 -7
- data/docs/guides/jobs.md +54 -11
- data/docs/guides/networking/custom_adapters.md +109 -81
- data/docs/guides/networking/http.md +1 -1
- data/docs/guides/pages.md +24 -22
- data/docs/guides/routing.md +116 -34
- data/docs/guides/tasks.md +30 -10
- data/docs/guides/tutorial.md +23 -17
- data/docs/guides/user_agents.md +11 -9
- data/lib/wayfarer/base.rb +9 -8
- data/lib/wayfarer/batch_completion.rb +18 -14
- data/lib/wayfarer/callbacks.rb +14 -14
- data/lib/wayfarer/cli/route_printer.rb +78 -96
- data/lib/wayfarer/cli.rb +12 -30
- data/lib/wayfarer/gc.rb +6 -1
- data/lib/wayfarer/kv.rb +28 -0
- data/lib/wayfarer/middleware/base.rb +0 -4
- data/lib/wayfarer/middleware/chain.rb +7 -1
- data/lib/wayfarer/middleware/content_type.rb +20 -15
- data/lib/wayfarer/middleware/controller.rb +1 -1
- data/lib/wayfarer/middleware/dedup.rb +9 -3
- data/lib/wayfarer/middleware/dispatch.rb +7 -2
- data/lib/wayfarer/middleware/normalize.rb +4 -12
- data/lib/wayfarer/middleware/router.rb +1 -1
- data/lib/wayfarer/middleware/uri_parser.rb +4 -3
- data/lib/wayfarer/networking/context.rb +13 -2
- data/lib/wayfarer/networking/ferrum.rb +2 -5
- data/lib/wayfarer/networking/follow.rb +2 -1
- data/lib/wayfarer/networking/pool.rb +11 -12
- data/lib/wayfarer/networking/selenium.rb +15 -7
- data/lib/wayfarer/networking/strategy.rb +6 -2
- data/lib/wayfarer/page.rb +0 -2
- data/lib/wayfarer/parsing/xml.rb +1 -1
- data/lib/wayfarer/parsing.rb +2 -5
- data/lib/wayfarer/redis/barrier.rb +15 -2
- data/lib/wayfarer/redis/counter.rb +1 -2
- data/lib/wayfarer/routing/dsl.rb +166 -31
- data/lib/wayfarer/routing/hash_stack.rb +33 -0
- data/lib/wayfarer/routing/matchers/custom.rb +8 -5
- data/lib/wayfarer/routing/matchers/{suffix.rb → empty_params.rb} +2 -6
- data/lib/wayfarer/routing/matchers/host.rb +15 -9
- data/lib/wayfarer/routing/matchers/path.rb +11 -33
- data/lib/wayfarer/routing/matchers/query.rb +41 -17
- data/lib/wayfarer/routing/matchers/result.rb +12 -0
- data/lib/wayfarer/routing/matchers/scheme.rb +13 -5
- data/lib/wayfarer/routing/matchers/url.rb +13 -5
- data/lib/wayfarer/routing/path_consumer.rb +130 -0
- data/lib/wayfarer/routing/path_finder.rb +151 -23
- data/lib/wayfarer/routing/result.rb +1 -1
- data/lib/wayfarer/routing/root_route.rb +14 -2
- data/lib/wayfarer/routing/route.rb +71 -14
- data/lib/wayfarer/routing/serializable.rb +28 -0
- data/lib/wayfarer/routing/sub_route.rb +53 -0
- data/lib/wayfarer/routing/target_route.rb +17 -1
- data/lib/wayfarer/stringify.rb +1 -2
- data/lib/wayfarer/task.rb +3 -5
- data/lib/wayfarer/uri/normalization.rb +120 -0
- data/lib/wayfarer.rb +55 -10
- data/mise.toml +2 -0
- data/mkdocs.yml +8 -17
- data/rake/lint.rake +0 -96
- data/rake/release.rake +1 -13
- data/rake/tests.rake +8 -4
- data/requirements.txt +1 -1
- data/spec/factories/job.rb +8 -0
- data/spec/factories/middleware.rb +2 -2
- data/spec/factories/path_finder.rb +11 -0
- data/spec/factories/redis.rb +19 -0
- data/spec/factories/task.rb +39 -1
- data/spec/spec_helpers.rb +50 -57
- data/spec/support/active_job_helpers.rb +8 -0
- data/spec/support/integration_helpers.rb +21 -0
- data/spec/support/redis_helpers.rb +9 -0
- data/spec/support/test_app.rb +64 -43
- data/spec/{base_spec.rb → wayfarer/base_spec.rb} +32 -36
- data/spec/wayfarer/batch_completion_spec.rb +142 -0
- data/spec/wayfarer/cli/job_spec.rb +88 -0
- data/spec/wayfarer/cli/routing_spec.rb +322 -0
- data/spec/{cli → wayfarer/cli}/version_spec.rb +1 -1
- data/spec/wayfarer/gc_spec.rb +29 -0
- data/spec/{handler_spec.rb → wayfarer/handler_spec.rb} +1 -3
- data/spec/{integration → wayfarer/integration}/callbacks_spec.rb +9 -6
- data/spec/wayfarer/integration/content_type_spec.rb +37 -0
- data/spec/wayfarer/integration/custom_routing_spec.rb +51 -0
- data/spec/{integration → wayfarer/integration}/gc_spec.rb +9 -13
- data/spec/{integration → wayfarer/integration}/handler_spec.rb +9 -10
- data/spec/{integration → wayfarer/integration}/page_spec.rb +16 -14
- data/spec/{integration → wayfarer/integration}/params_spec.rb +4 -4
- data/spec/{integration → wayfarer/integration}/parsing_spec.rb +7 -32
- data/spec/wayfarer/integration/retry_spec.rb +112 -0
- data/spec/{integration → wayfarer/integration}/stage_spec.rb +6 -6
- data/spec/{middleware → wayfarer/middleware}/batch_completion_spec.rb +4 -5
- data/spec/{middleware → wayfarer/middleware}/chain_spec.rb +20 -15
- data/spec/{middleware → wayfarer/middleware}/content_type_spec.rb +18 -21
- data/spec/{middleware → wayfarer/middleware}/controller_spec.rb +25 -24
- data/spec/wayfarer/middleware/dedup_spec.rb +66 -0
- data/spec/wayfarer/middleware/normalize_spec.rb +32 -0
- data/spec/{middleware → wayfarer/middleware}/router_spec.rb +18 -20
- data/spec/{middleware → wayfarer/middleware}/stage_spec.rb +11 -10
- data/spec/wayfarer/middleware/uri_parser_spec.rb +63 -0
- data/spec/{middleware → wayfarer/middleware}/user_agent_spec.rb +34 -32
- data/spec/wayfarer/networking/capybara_spec.rb +13 -0
- data/spec/{networking → wayfarer/networking}/context_spec.rb +47 -38
- data/spec/wayfarer/networking/ferrum_spec.rb +13 -0
- data/spec/{networking → wayfarer/networking}/follow_spec.rb +9 -4
- data/spec/wayfarer/networking/http_spec.rb +12 -0
- data/spec/{networking → wayfarer/networking}/pool_spec.rb +11 -9
- data/spec/wayfarer/networking/selenium_spec.rb +12 -0
- data/spec/{networking → wayfarer/networking}/strategy.rb +35 -56
- data/spec/{page_spec.rb → wayfarer/page_spec.rb} +3 -3
- data/spec/{parsing → wayfarer/parsing}/json_spec.rb +1 -1
- data/spec/{parsing/xml_spec.rb → wayfarer/parsing/xml_parse_spec.rb} +4 -3
- data/spec/{redis → wayfarer/redis}/barrier_spec.rb +5 -4
- data/spec/wayfarer/redis/counter_spec.rb +34 -0
- data/spec/{redis → wayfarer/redis}/pool_spec.rb +3 -2
- data/spec/{routing → wayfarer/routing}/dsl_spec.rb +12 -22
- data/spec/wayfarer/routing/hash_stack_spec.rb +63 -0
- data/spec/wayfarer/routing/integration_spec.rb +101 -0
- data/spec/wayfarer/routing/matchers/custom_spec.rb +39 -0
- data/spec/wayfarer/routing/matchers/host_spec.rb +56 -0
- data/spec/wayfarer/routing/matchers/matcher.rb +17 -0
- data/spec/wayfarer/routing/matchers/path_spec.rb +43 -0
- data/spec/wayfarer/routing/matchers/query_spec.rb +123 -0
- data/spec/wayfarer/routing/matchers/scheme_spec.rb +45 -0
- data/spec/wayfarer/routing/matchers/url_spec.rb +33 -0
- data/spec/wayfarer/routing/path_consumer_spec.rb +123 -0
- data/spec/wayfarer/routing/path_finder_spec.rb +409 -0
- data/spec/wayfarer/routing/root_route_spec.rb +51 -0
- data/spec/wayfarer/routing/route_spec.rb +74 -0
- data/spec/wayfarer/routing/sub_route_spec.rb +103 -0
- data/spec/wayfarer/uri/normalization_spec.rb +98 -0
- data/spec/wayfarer_spec.rb +2 -2
- data/wayfarer.gemspec +17 -28
- metadata +183 -832
- data/.rbenv-gemsets +0 -1
- data/.ruby-version +0 -1
- data/RELEASING.md +0 -17
- data/docs/cookbook/user_agent.md +0 -7
- data/docs/design.md +0 -36
- data/docs/guides/jobs/error_handling.md +0 -40
- data/docs/reference/configuration.md +0 -36
- data/lib/wayfarer/middleware/lazy.rb +0 -11
- data/spec/batch_completion_spec.rb +0 -104
- data/spec/cli/job_spec.rb +0 -74
- data/spec/cli/routing_spec.rb +0 -101
- data/spec/fixtures/dummy_job.rb +0 -9
- data/spec/gc_spec.rb +0 -17
- data/spec/integration/content_type_spec.rb +0 -145
- data/spec/integration/routing_spec.rb +0 -18
- data/spec/middleware/dedup_spec.rb +0 -71
- data/spec/middleware/dispatch_spec.rb +0 -59
- data/spec/middleware/normalize_spec.rb +0 -60
- data/spec/middleware/uri_parser_spec.rb +0 -53
- data/spec/networking/capybara_spec.rb +0 -12
- data/spec/networking/ferrum_spec.rb +0 -12
- data/spec/networking/http_spec.rb +0 -12
- data/spec/networking/selenium_spec.rb +0 -12
- data/spec/redis/counter_spec.rb +0 -44
- data/spec/routing/integration_spec.rb +0 -110
- data/spec/routing/matchers/custom_spec.rb +0 -31
- data/spec/routing/matchers/host_spec.rb +0 -49
- data/spec/routing/matchers/path_spec.rb +0 -43
- data/spec/routing/matchers/query_spec.rb +0 -137
- data/spec/routing/matchers/scheme_spec.rb +0 -25
- data/spec/routing/matchers/suffix_spec.rb +0 -41
- data/spec/routing/matchers/uri_spec.rb +0 -27
- data/spec/routing/path_finder_spec.rb +0 -33
- data/spec/routing/root_route_spec.rb +0 -29
- data/spec/routing/route_spec.rb +0 -43
- data/spec/support/static/git-scm.com/assets/application-38b0d42ff05ffea45841edebbd14b75b89585646153808e82907c2c5c11f324b.js +0 -772
- data/spec/support/static/git-scm.com/assets/application-cafcf280f67db0e6d8168ba98a38da878769a9d5f37793b68ffb963a02d185e0.css +0 -1
- data/spec/support/static/git-scm.com/assets/modernize-b3ebe0c31c24f230dc62179d3e1030d2e57a53b1668d9382c0a27dbd44a94beb.js +0 -20
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Bash.html +0 -751
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-PowerShell.html +0 -804
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Sublime-Text.html +0 -728
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Visual-Studio-Code.html +0 -751
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Visual-Studio.html +0 -740
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Zsh.html +0 -765
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces.html +0 -931
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Summary.html +0 -702
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-Command-line-Git.html +0 -720
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-Dulwich.html +0 -746
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-JGit.html +0 -889
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-Libgit2.html +0 -1003
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-go-git.html +0 -792
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Administration.html +0 -745
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Basic-Snapshotting.html +0 -840
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Branching-and-Merging.html +0 -829
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Debugging.html +0 -731
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Email.html +0 -766
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-External-Systems.html +0 -721
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Getting-and-Creating-Projects.html +0 -746
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Inspection-and-Comparison.html +0 -735
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Patching.html +0 -742
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Plumbing-Commands.html +0 -715
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Setup-and-Config.html +0 -863
- data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Sharing-and-Updating-Projects.html +0 -802
- data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-An-Example-Git-Enforced-Policy.html +0 -1200
- data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-Git-Attributes.html +0 -1134
- data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-Git-Configuration.html +0 -1315
- data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-Git-Hooks.html +0 -876
- data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-Summary.html +0 -704
- data/spec/support/static/git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project.html +0 -1667
- data/spec/support/static/git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows.html +0 -859
- data/spec/support/static/git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/Distributed-Git-Summary.html +0 -704
- data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-A-Short-History-of-Git.html +0 -735
- data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-About-Version-Control.html +0 -783
- data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup.html +0 -889
- data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-Getting-Help.html +0 -750
- data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-Installing-Git.html +0 -879
- data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-Summary.html +0 -704
- data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-The-Command-Line.html +0 -711
- data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-What-is-Git?.html +0 -857
- data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository.html +0 -816
- data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Git-Aliases.html +0 -775
- data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository.html +0 -1432
- data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Summary.html +0 -703
- data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Tagging.html +0 -1049
- data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Undoing-Things.html +0 -998
- data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History.html +0 -1172
- data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes.html +0 -983
- data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging.html +0 -1102
- data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Branch-Management.html +0 -946
- data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell.html +0 -1020
- data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Branching-Workflows.html +0 -786
- data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Rebasing.html +0 -1028
- data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Remote-Branches.html +0 -1009
- data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Summary.html +0 -705
- data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Environment-Variables.html +0 -1009
- data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Git-Objects.html +0 -1209
- data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Git-References.html +0 -939
- data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery.html +0 -1086
- data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Packfiles.html +0 -876
- data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain.html +0 -745
- data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Summary.html +0 -708
- data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-The-Refspec.html +0 -872
- data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols.html +0 -1043
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Advanced-Merging.html +0 -1605
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Bundling.html +0 -888
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Credential-Storage.html +0 -1035
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git.html +0 -861
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Interactive-Staging.html +0 -920
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Replace.html +0 -949
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Rerere.html +0 -983
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Reset-Demystified.html +0 -1236
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Revision-Selection.html +0 -1178
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Rewriting-History.html +0 -1182
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Searching.html +0 -875
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work.html +0 -922
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Stashing-and-Cleaning.html +0 -1039
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Submodules.html +0 -1864
- data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Summary.html +0 -705
- data/spec/support/static/git-scm.com/book/en/v2/Git-and-Other-Systems-Git-as-a-Client.html +0 -2656
- data/spec/support/static/git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git.html +0 -1741
- data/spec/support/static/git-scm.com/book/en/v2/Git-and-Other-Systems-Summary.html +0 -703
- data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key.html +0 -759
- data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a-Server.html +0 -827
- data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Git-Daemon.html +0 -775
- data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-GitLab.html +0 -872
- data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-GitWeb.html +0 -776
- data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server.html +0 -870
- data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Smart-HTTP.html +0 -789
- data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Summary.html +0 -709
- data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols.html +0 -963
- data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Third-Party-Hosted-Options.html +0 -711
- data/spec/support/static/git-scm.com/book/en/v2/GitHub-Account-Setup-and-Configuration.html +0 -858
- data/spec/support/static/git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/GitHub-Maintaining-a-Project.html +0 -1218
- data/spec/support/static/git-scm.com/book/en/v2/GitHub-Managing-an-organization.html +0 -797
- data/spec/support/static/git-scm.com/book/en/v2/GitHub-Scripting-GitHub.html +0 -1059
- data/spec/support/static/git-scm.com/book/en/v2/GitHub-Summary.html +0 -704
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_abort_merge.html +0 -1605
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_add_email_addresses.html +0 -858
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_advanced_merging.html +0 -1605
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_an_example_git_enforced_policy.html +0 -1200
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_annotated_tags.html +0 -1049
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_api_comment.html +0 -1059
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_bare_repo.html +0 -827
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_basic_branching.html +0 -1102
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_basic_merge_conflicts.html +0 -1102
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_basic_merging.html +0 -1102
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_binary_search.html +0 -861
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_branch_management.html +0 -946
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_branch_references.html +0 -1178
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_build_number.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_bundling.html +0 -888
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_changing_multiple.html +0 -1182
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_checking_out_conflicts.html +0 -1605
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_checking_out_remotes.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_checking_status.html +0 -1432
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_cloning_submodules.html +0 -1864
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_commit_guidelines.html +0 -1667
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_commit_ranges.html +0 -1178
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_commit_status.html +0 -1059
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_committing_changes.html +0 -1432
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_contrib_file.html +0 -1218
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_contributing_project.html +0 -1667
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_create_new_branch.html +0 -1020
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_credential_caching.html +0 -1035
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_custom_importer.html +0 -1741
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_data_recovery.html +0 -1086
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_delete_branches.html +0 -1009
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_editor.html +0 -889
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_eg_task_lists.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_email_hooks.html +0 -876
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_email_notification.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_email_notifications.html +0 -1218
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_email_pr.html +0 -1218
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_enforcing_commit_message_format.html +0 -1200
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_example_markdown.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_external_merge_tools.html +0 -1315
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_fetch_and_push_on_different_repositories.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_fetching_and_pulling.html +0 -983
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_file_annotation.html +0 -861
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_first_time.html +0 -889
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_generate_ssh_key.html +0 -759
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_getting_a_repo.html +0 -816
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_getting_git_on_a_server.html +0 -827
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_aliases.html +0 -775
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_am.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_amend.html +0 -1182
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_branches_overview.html +0 -1020
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_clean.html +0 -1039
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_cloning.html +0 -816
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_commit_objects.html +0 -1209
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_config.html +0 -1315
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_diff_staged.html +0 -1432
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_gc.html +0 -1086
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_grep.html +0 -875
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_help.html +0 -750
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_hooks.html +0 -876
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_mv.html +0 -1432
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_p4.html +0 -1741
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_p4_branches.html +0 -2656
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_reflog.html +0 -1178
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_refs.html +0 -939
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_reset.html +0 -1236
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_stashing.html +0 -1039
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_submodules.html +0 -1864
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_svn.html +0 -2656
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_tagging.html +0 -1049
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_gitlab_groups_section.html +0 -872
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_ignoring.html +0 -1432
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_inspecting_remote.html +0 -983
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_integration_manager.html +0 -859
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_interactive_staging.html +0 -920
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_keyword_expansion.html +0 -1134
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_libgit2_bindings.html +0 -1003
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_manual_remerge.html +0 -1605
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_md_code.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_md_drag.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_md_emoji.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_md_quote.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_merge_button.html +0 -1218
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_merge_log.html +0 -1605
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_merge_rebase_work.html +0 -1028
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_new_repo_dropdown.html +0 -1218
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_not_center.html +0 -1218
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_org_page.html +0 -797
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_other_client_hooks.html +0 -876
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_p4_git_fusion.html +0 -2656
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_patches_from_email.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_personal_avatar.html +0 -858
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_plumbing_porcelain.html +0 -745
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_closed.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_discussion.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_fail.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_final.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_references.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_references_render.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_refs.html +0 -1218
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_pre_merge_rebase_work.html +0 -1028
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_preparing_release.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_private_team.html +0 -1667
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_project_over_email.html +0 -1667
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_public_project.html +0 -1667
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_publishing_submodules.html +0 -1864
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_pushing_branches.html +0 -1009
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_pushing_refspecs.html +0 -872
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_pushing_remotes.html +0 -983
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebase_cherry_pick.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebase_peril.html +0 -1028
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebase_rebase.html +0 -1028
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebase_rebase_work.html +0 -1028
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebasing.html +0 -1028
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_refspec.html +0 -872
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_remote_branches.html +0 -1009
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_remote_repos.html +0 -983
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_removing_file_every_commit.html +0 -1182
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_removing_files.html +0 -1432
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_removing_objects.html +0 -1086
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_replace.html +0 -949
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_reverse_commit.html +0 -1605
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_revision_selection.html +0 -1178
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_rewriting_history.html +0 -1182
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_searching.html +0 -875
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_service_config.html +0 -1059
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_services_hooks.html +0 -1059
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_setting_up_server.html +0 -870
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_sharing_tags.html +0 -1049
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_signing.html +0 -922
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_signing_commits.html +0 -922
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_squashing.html +0 -1182
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_starting_submodules.html +0 -1864
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_subtree_merge.html +0 -1605
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_switching_branches.html +0 -1020
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_tagging_releases.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_task_list_progress.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_team_page.html +0 -797
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_the_index.html +0 -1236
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_the_shortlog.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_topic_branch.html +0 -786
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_tracking_branches.html +0 -1009
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_tracking_files.html +0 -1432
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_tree_objects.html +0 -1209
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_triple_dot.html +0 -1178
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_undoing.html +0 -998
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_unstaging.html +0 -998
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_viewing_history.html +0 -1172
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_web_hook.html +0 -1059
- data/spec/support/static/git-scm.com/book/en/v2/ch00/_what_is_introduced.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/ch01-getting-started.html +0 -783
- data/spec/support/static/git-scm.com/book/en/v2/ch00/ch02-git-basics-chapter.html +0 -816
- data/spec/support/static/git-scm.com/book/en/v2/ch00/ch03-git-branching.html +0 -1020
- data/spec/support/static/git-scm.com/book/en/v2/ch00/ch05-distributed-git.html +0 -859
- data/spec/support/static/git-scm.com/book/en/v2/ch00/ch06-github.html +0 -858
- data/spec/support/static/git-scm.com/book/en/v2/ch00/ch06-github_flow.html +0 -1502
- data/spec/support/static/git-scm.com/book/en/v2/ch00/ch10-git-internals.html +0 -745
- data/spec/support/static/git-scm.com/book/en/v2/ch00/ch_core_editor.html +0 -863
- data/spec/support/static/git-scm.com/book/en/v2/ch00/divergent_history.html +0 -1020
- data/spec/support/static/git-scm.com/book/en/v2/ch00/double_dot.html +0 -1178
- data/spec/support/static/git-scm.com/book/en/v2/ch00/filters_a.html +0 -1134
- data/spec/support/static/git-scm.com/book/en/v2/ch00/filters_b.html +0 -1134
- data/spec/support/static/git-scm.com/book/en/v2/ch00/limit_options.html +0 -1172
- data/spec/support/static/git-scm.com/book/en/v2/ch00/log_options.html +0 -1172
- data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_a.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_b.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_c.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_d.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_e.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_f.html +0 -1354
- data/spec/support/static/git-scm.com/book/en/v2/ch00/oh_my_zsh_git.html +0 -765
- data/spec/support/static/git-scm.com/book/en/v2/ch00/pretty_format.html +0 -1172
- data/spec/support/static/git-scm.com/book/en/v2/ch00/psp_b.html +0 -1667
- data/spec/support/static/git-scm.com/book/en/v2/ch00/rbdiag_e.html +0 -1028
- data/spec/support/static/git-scm.com/book/en/v2/ch00/rbdiag_g.html +0 -1028
- data/spec/support/static/git-scm.com/book/en/v2/ch00/rbdiag_h.html +0 -1028
- data/spec/support/static/git-scm.com/book/en/v2/ch00/rbdiag_i.html +0 -1028
- data/spec/support/static/git-scm.com/book/en/v2/ch00/rebasing-merging-example.html +0 -1028
- data/spec/support/static/git-scm.com/book/en/v2/ch00/ref_rerere.html +0 -983
- data/spec/support/static/git-scm.com/book/en/v2/ch00/ref_the_ref.html +0 -939
- data/spec/support/static/git-scm.com/book/en/v2/ch00/wfdiag_b.html +0 -859
- data/spec/support/static/git-scm.com/book/en/v2/ch00/wfdiag_c.html +0 -859
- data/spec/support/static/git-scm.com/book/en/v2/ch00/what_is_git_section.html +0 -857
- data/spec/support/static/git-scm.com/book/en/v2/images/2fa-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/account-settings.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/advance-master.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/advance-testing.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/areas.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/avatar-crop.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-4.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-5.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-6.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/basic-merging-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/basic-merging-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/basic-rebase-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/basic-rebase-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/basic-rebase-3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/basic-rebase-4.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/benevolent-dictator.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/blink-01-start.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/blink-02-pr.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/blink-03-pull-request-open.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/blink-04-email.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/blink-04-pr-comment.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/blink-05-general-comment.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/blink-06-final.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/branch-and-history.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/branch_widget_mac.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/branch_widget_win.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/centralized.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/centralized_workflow.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/checkout-master.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/clean.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/collaborators.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/commit-and-tree.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/commits-and-parents.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/data-model-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/data-model-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/data-model-3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/data-model-4.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/deltas.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/distributed.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/double-dot.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/email-settings.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/forkbutton.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/git-bash.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/git-diff-check.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/git-fusion-boot.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/git-fusion-perforce-graph.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/git-gui.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/git-instaweb.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/git-osx-installer.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/github_mac.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/github_win.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/gitk.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/gitlab-groups.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/gitlab-menu.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/gitlab-users.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/head-to-master.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/head-to-testing.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/integration-manager.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-4.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-5.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/jb.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/large-merges-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/large-merges-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/lifecycle.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/local.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/lr-branches-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/lr-branches-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/maint-01-email.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/maint-02-merge.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/maint-03-email-resp.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/maint-04-target.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/maint-05-mentions.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/maint-06-unsubscribe.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/maint-07-notifications.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/maint-08-notifications-page.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/maint-09-contrib.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/maint-10-default-branch.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/maint-11-transfer.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/managed-team-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/managed-team-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/managed-team-3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/managed-team-flow.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/markdown-01-example.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/markdown-02-tasks.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/markdown-03-task-summary.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/markdown-04-fenced-code.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/markdown-05-quote.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/markdown-06-emoji-complete.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/markdown-07-emoji.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/markdown-08-drag-drop.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/mentions-01-syntax.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/mentions-02-render.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/mentions-03-closed.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-4.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-5.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/new-repo.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/neworg.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/newrepo.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/newrepoform.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/orgs-01-page.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/orgs-02-teams.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/orgs-03-audit.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/p4merge.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-4.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-5.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/posh-git.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/pr-01-fail.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/pr-02-merge-fix.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/public-small-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/public-small-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/public-small-3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/rebasing-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/rebasing-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-4.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-5.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/replace1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/replace2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/replace3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/replace4.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/replace5.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reposettingslink.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/rerere1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/rerere2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/rerere3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-checkout.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex4.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex5.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex6.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-hard.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-mixed.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-path1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-path2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-path3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-soft.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-squash-r1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-squash-r2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-squash-r3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-start.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/reset-workflow.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/scripting-01-services.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/scripting-02-email-service.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/scripting-03-webhook.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/scripting-04-webhook-debug.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/scripting-05-access-token.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/scripting-06-comment.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/scripting-07-status.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/signup.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/small-team-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/small-team-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/small-team-3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/small-team-4.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/small-team-5.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/small-team-6.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/small-team-7.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/small-team-flow.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/smudge.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/snapshots.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/ssh-keys.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/topic-branches-1.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/topic-branches-2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/two-branches.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-reset.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-revert.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-revert2.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-revert3.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-start.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/your-profile.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/zsh-oh-my.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2/images/zsh-prompt.png +0 -0
- data/spec/support/static/git-scm.com/book/en/v2.html +0 -688
- data/spec/support/static/git-scm.com/favicon.ico +0 -0
- data/spec/support/static/git-scm.com/images/bg/body.jpg +0 -0
- data/spec/support/static/git-scm.com/images/bg/isometric-grid.png +0 -0
- data/spec/support/static/git-scm.com/images/bg/isometric-grid@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/bg/search-header.jpg +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/android.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/android@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/eclipse.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/eclipse@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/facebook.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/facebook@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/gnome.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/gnome@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/google.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/google@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/kde.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/kde@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/linked-in.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/linked-in@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/linux.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/linux@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/microsoft.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/microsoft@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/netflix.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/netflix@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/perl.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/perl@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/postgresql.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/postgresql@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/qt.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/qt@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/rails.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/rails@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/twitter.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/twitter@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/x.png +0 -0
- data/spec/support/static/git-scm.com/images/company-project-logos/x@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/epub.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/admin-sm.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/admin-sm@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/apple.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/apple@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/book.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/book@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/box.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/box@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/branch-sm.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/branch-sm@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/camera-sm.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/camera-sm@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/chevron-up@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/code.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/code@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/debugging-sm.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/debugging-sm@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/document.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/document@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/download.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/email-sm.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/email-sm@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/external-sm.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/external-sm@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/gui.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/gui@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/info.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/info@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/inspection-sm.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/inspection-sm@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/linux.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/linux@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/nav-circles.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/nav-circles@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/patching-sm.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/patching-sm@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/plumbing-sm.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/plumbing-sm@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/projects-sm.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/projects-sm@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/search.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/search@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/server-admin-sm.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/server-admin-sm@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/setup-sm.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/setup-sm@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/sharing-sm.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/sharing-sm@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/sidebar.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/sidebar@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/source-code.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/source-code@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/windows.png +0 -0
- data/spec/support/static/git-scm.com/images/icons/windows@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/logo@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/mobi.png +0 -0
- data/spec/support/static/git-scm.com/images/monitor-default.png +0 -0
- data/spec/support/static/git-scm.com/images/monitor-default@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/monitor-linux.png +0 -0
- data/spec/support/static/git-scm.com/images/monitor-linux@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/monitor-mac.png +0 -0
- data/spec/support/static/git-scm.com/images/monitor-mac@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/monitor-windows.png +0 -0
- data/spec/support/static/git-scm.com/images/monitor-windows@2x.png +0 -0
- data/spec/support/static/git-scm.com/images/pdf.png +0 -0
- data/spec/support/static/git-scm.com/images/progit2.png +0 -0
- data/spec/support/static/git-scm.com/images/sidebar-divider.png +0 -0
- data/spec/support/static/git-scm.com/images/sidebar-divider@2x.png +0 -0
- data/spec/support/static/git-scm.com/robots.txt +0 -0
- data/spec/support/static/graph/details/a.html +0 -10
- data/spec/support/static/graph/details/b.html +0 -10
- data/spec/support/static/graph/index.html +0 -20
- data/spec/support/static/links/links.html +0 -28
- data/docs/{reference → guides}/cli.md +0 -0
- data/spec/{stringify_spec.rb → wayfarer/stringify_spec.rb} +2 -2
- /data/spec/{task_spec.rb → wayfarer/task_spec.rb} +0 -0
|
@@ -1,1086 +0,0 @@
|
|
|
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 - Maintenance and Data Recovery</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="_git_gc.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" >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" class=active>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>10.7 Git Internals - Maintenance and Data Recovery</h1>
|
|
675
|
-
<div>
|
|
676
|
-
<h2 id="_maintenance_and_data_recovery">Maintenance and Data Recovery</h2>
|
|
677
|
-
<div class="paragraph">
|
|
678
|
-
<p>Occasionally, you may have to do some cleanup – make a repository more compact, clean up an imported repository, or recover lost work.
|
|
679
|
-
This section will cover some of these scenarios.</p>
|
|
680
|
-
</div>
|
|
681
|
-
<div class="sect3">
|
|
682
|
-
<h3 id="_git_gc">Maintenance</h3>
|
|
683
|
-
<div class="paragraph">
|
|
684
|
-
<p>Occasionally, Git automatically runs a command called “auto gc”.
|
|
685
|
-
Most of the time, this command does nothing.
|
|
686
|
-
However, if there are too many loose objects (objects not in a packfile) or too many packfiles, Git launches a full-fledged <code>git gc</code> command.
|
|
687
|
-
The “gc” stands for garbage collect, and the command does a number of things: it gathers up all the loose objects and places them in packfiles, it consolidates packfiles into one big packfile, and it removes objects that aren’t reachable from any commit and are a few months old.</p>
|
|
688
|
-
</div>
|
|
689
|
-
<div class="paragraph">
|
|
690
|
-
<p>You can run auto gc manually as follows:</p>
|
|
691
|
-
</div>
|
|
692
|
-
<div class="listingblock">
|
|
693
|
-
<div class="content">
|
|
694
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git gc --auto</code></pre>
|
|
695
|
-
</div>
|
|
696
|
-
</div>
|
|
697
|
-
<div class="paragraph">
|
|
698
|
-
<p>Again, this generally does nothing.
|
|
699
|
-
You must have around 7,000 loose objects or more than 50 packfiles for Git to fire up a real gc command.
|
|
700
|
-
You can modify these limits with the <code>gc.auto</code> and <code>gc.autopacklimit</code> config settings, respectively.</p>
|
|
701
|
-
</div>
|
|
702
|
-
<div class="paragraph">
|
|
703
|
-
<p>The other thing <code>gc</code> will do is pack up your references into a single file.
|
|
704
|
-
Suppose your repository contains the following branches and tags:</p>
|
|
705
|
-
</div>
|
|
706
|
-
<div class="listingblock">
|
|
707
|
-
<div class="content">
|
|
708
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ find .git/refs -type f
|
|
709
|
-
.git/refs/heads/experiment
|
|
710
|
-
.git/refs/heads/master
|
|
711
|
-
.git/refs/tags/v1.0
|
|
712
|
-
.git/refs/tags/v1.1</code></pre>
|
|
713
|
-
</div>
|
|
714
|
-
</div>
|
|
715
|
-
<div class="paragraph">
|
|
716
|
-
<p>If you run <code>git gc</code>, you’ll no longer have these files in the <code>refs</code> directory.
|
|
717
|
-
Git will move them for the sake of efficiency into a file named <code>.git/packed-refs</code> that looks like this:</p>
|
|
718
|
-
</div>
|
|
719
|
-
<div class="listingblock">
|
|
720
|
-
<div class="content">
|
|
721
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ cat .git/packed-refs
|
|
722
|
-
# pack-refs with: peeled fully-peeled
|
|
723
|
-
cac0cab538b970a37ea1e769cbbde608743bc96d refs/heads/experiment
|
|
724
|
-
ab1afef80fac8e34258ff41fc1b867c702daa24b refs/heads/master
|
|
725
|
-
cac0cab538b970a37ea1e769cbbde608743bc96d refs/tags/v1.0
|
|
726
|
-
9585191f37f7b0fb9444f35a9bf50de191beadc2 refs/tags/v1.1
|
|
727
|
-
^1a410efbd13591db07496601ebc7a059dd55cfe9</code></pre>
|
|
728
|
-
</div>
|
|
729
|
-
</div>
|
|
730
|
-
<div class="paragraph">
|
|
731
|
-
<p>If you update a reference, Git doesn’t edit this file but instead writes a new file to <code>refs/heads</code>.
|
|
732
|
-
To get the appropriate SHA-1 for a given reference, Git checks for that reference in the <code>refs</code> directory and then checks the <code>packed-refs</code> file as a fallback.
|
|
733
|
-
So if you can’t find a reference in the <code>refs</code> directory, it’s probably in your <code>packed-refs</code> file.</p>
|
|
734
|
-
</div>
|
|
735
|
-
<div class="paragraph">
|
|
736
|
-
<p>Notice the last line of the file, which begins with a <code>^</code>.
|
|
737
|
-
This means the tag directly above is an annotated tag and that line is the commit that the annotated tag points to.</p>
|
|
738
|
-
</div>
|
|
739
|
-
</div>
|
|
740
|
-
<div class="sect3">
|
|
741
|
-
<h3 id="_data_recovery">Data Recovery</h3>
|
|
742
|
-
<div class="paragraph">
|
|
743
|
-
<p>At some point in your Git journey, you may accidentally lose a commit.
|
|
744
|
-
Generally, this happens because you force-delete a branch that had work on it, and it turns out you wanted the branch after all; or you hard-reset a branch, thus abandoning commits that you wanted something from.
|
|
745
|
-
Assuming this happens, how can you get your commits back?</p>
|
|
746
|
-
</div>
|
|
747
|
-
<div class="paragraph">
|
|
748
|
-
<p>Here’s an example that hard-resets the <code>master</code> branch in your test repository to an older commit and then recovers the lost commits.
|
|
749
|
-
First, let’s review where your repository is at this point:</p>
|
|
750
|
-
</div>
|
|
751
|
-
<div class="listingblock">
|
|
752
|
-
<div class="content">
|
|
753
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git log --pretty=oneline
|
|
754
|
-
ab1afef80fac8e34258ff41fc1b867c702daa24b Modify repo.rb a bit
|
|
755
|
-
484a59275031909e19aadb7c92262719cfcdf19a Create repo.rb
|
|
756
|
-
1a410efbd13591db07496601ebc7a059dd55cfe9 Third commit
|
|
757
|
-
cac0cab538b970a37ea1e769cbbde608743bc96d Second commit
|
|
758
|
-
fdf4fc3344e67ab068f836878b6c4951e3b15f3d First commit</code></pre>
|
|
759
|
-
</div>
|
|
760
|
-
</div>
|
|
761
|
-
<div class="paragraph">
|
|
762
|
-
<p>Now, move the <code>master</code> branch back to the middle commit:</p>
|
|
763
|
-
</div>
|
|
764
|
-
<div class="listingblock">
|
|
765
|
-
<div class="content">
|
|
766
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git reset --hard 1a410efbd13591db07496601ebc7a059dd55cfe9
|
|
767
|
-
HEAD is now at 1a410ef Third commit
|
|
768
|
-
$ git log --pretty=oneline
|
|
769
|
-
1a410efbd13591db07496601ebc7a059dd55cfe9 Third commit
|
|
770
|
-
cac0cab538b970a37ea1e769cbbde608743bc96d Second commit
|
|
771
|
-
fdf4fc3344e67ab068f836878b6c4951e3b15f3d First commit</code></pre>
|
|
772
|
-
</div>
|
|
773
|
-
</div>
|
|
774
|
-
<div class="paragraph">
|
|
775
|
-
<p>You’ve effectively lost the top two commits – you have no branch from which those commits are reachable.
|
|
776
|
-
You need to find the latest commit SHA-1 and then add a branch that points to it.
|
|
777
|
-
The trick is finding that latest commit SHA-1 – it’s not like you’ve memorized it, right?</p>
|
|
778
|
-
</div>
|
|
779
|
-
<div class="paragraph">
|
|
780
|
-
<p>Often, the quickest way is to use a tool called <code>git reflog</code>.
|
|
781
|
-
As you’re working, Git silently records what your HEAD is every time you change it.
|
|
782
|
-
Each time you commit or change branches, the reflog is updated.
|
|
783
|
-
The reflog is also updated by the <code>git update-ref</code> command, which is another reason to use it instead of just writing the SHA-1 value to your ref files, as we covered in <a href="_git_refs.html">Git References</a>.
|
|
784
|
-
You can see where you’ve been at any time by running <code>git reflog</code>:</p>
|
|
785
|
-
</div>
|
|
786
|
-
<div class="listingblock">
|
|
787
|
-
<div class="content">
|
|
788
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git reflog
|
|
789
|
-
1a410ef HEAD@{0}: reset: moving to 1a410ef
|
|
790
|
-
ab1afef HEAD@{1}: commit: Modify repo.rb a bit
|
|
791
|
-
484a592 HEAD@{2}: commit: Create repo.rb</code></pre>
|
|
792
|
-
</div>
|
|
793
|
-
</div>
|
|
794
|
-
<div class="paragraph">
|
|
795
|
-
<p>Here we can see the two commits that we have had checked out, however there is not much information here.
|
|
796
|
-
To see the same information in a much more useful way, we can run <code>git log -g</code>, which will give you a normal log output for your reflog.</p>
|
|
797
|
-
</div>
|
|
798
|
-
<div class="listingblock">
|
|
799
|
-
<div class="content">
|
|
800
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git log -g
|
|
801
|
-
commit 1a410efbd13591db07496601ebc7a059dd55cfe9
|
|
802
|
-
Reflog: HEAD@{0} (Scott Chacon <schacon@gmail.com>)
|
|
803
|
-
Reflog message: updating HEAD
|
|
804
|
-
Author: Scott Chacon <schacon@gmail.com>
|
|
805
|
-
Date: Fri May 22 18:22:37 2009 -0700
|
|
806
|
-
|
|
807
|
-
Third commit
|
|
808
|
-
|
|
809
|
-
commit ab1afef80fac8e34258ff41fc1b867c702daa24b
|
|
810
|
-
Reflog: HEAD@{1} (Scott Chacon <schacon@gmail.com>)
|
|
811
|
-
Reflog message: updating HEAD
|
|
812
|
-
Author: Scott Chacon <schacon@gmail.com>
|
|
813
|
-
Date: Fri May 22 18:15:24 2009 -0700
|
|
814
|
-
|
|
815
|
-
Modify repo.rb a bit</code></pre>
|
|
816
|
-
</div>
|
|
817
|
-
</div>
|
|
818
|
-
<div class="paragraph">
|
|
819
|
-
<p>It looks like the bottom commit is the one you lost, so you can recover it by creating a new branch at that commit.
|
|
820
|
-
For example, you can start a branch named <code>recover-branch</code> at that commit (ab1afef):</p>
|
|
821
|
-
</div>
|
|
822
|
-
<div class="listingblock">
|
|
823
|
-
<div class="content">
|
|
824
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git branch recover-branch ab1afef
|
|
825
|
-
$ git log --pretty=oneline recover-branch
|
|
826
|
-
ab1afef80fac8e34258ff41fc1b867c702daa24b Modify repo.rb a bit
|
|
827
|
-
484a59275031909e19aadb7c92262719cfcdf19a Create repo.rb
|
|
828
|
-
1a410efbd13591db07496601ebc7a059dd55cfe9 Third commit
|
|
829
|
-
cac0cab538b970a37ea1e769cbbde608743bc96d Second commit
|
|
830
|
-
fdf4fc3344e67ab068f836878b6c4951e3b15f3d First commit</code></pre>
|
|
831
|
-
</div>
|
|
832
|
-
</div>
|
|
833
|
-
<div class="paragraph">
|
|
834
|
-
<p>Cool – now you have a branch named <code>recover-branch</code> that is where your <code>master</code> branch used to be, making the first two commits reachable again.
|
|
835
|
-
Next, suppose your loss was for some reason not in the reflog – you can simulate that by removing <code>recover-branch</code> and deleting the reflog.
|
|
836
|
-
Now the first two commits aren’t reachable by anything:</p>
|
|
837
|
-
</div>
|
|
838
|
-
<div class="listingblock">
|
|
839
|
-
<div class="content">
|
|
840
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git branch -D recover-branch
|
|
841
|
-
$ rm -Rf .git/logs/</code></pre>
|
|
842
|
-
</div>
|
|
843
|
-
</div>
|
|
844
|
-
<div class="paragraph">
|
|
845
|
-
<p>Because the reflog data is kept in the <code>.git/logs/</code> directory, you effectively have no reflog.
|
|
846
|
-
How can you recover that commit at this point?
|
|
847
|
-
One way is to use the <code>git fsck</code> utility, which checks your database for integrity.
|
|
848
|
-
If you run it with the <code>--full</code> option, it shows you all objects that aren’t pointed to by another object:</p>
|
|
849
|
-
</div>
|
|
850
|
-
<div class="listingblock">
|
|
851
|
-
<div class="content">
|
|
852
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git fsck --full
|
|
853
|
-
Checking object directories: 100% (256/256), done.
|
|
854
|
-
Checking objects: 100% (18/18), done.
|
|
855
|
-
dangling blob d670460b4b4aece5915caf5c68d12f560a9fe3e4
|
|
856
|
-
dangling commit ab1afef80fac8e34258ff41fc1b867c702daa24b
|
|
857
|
-
dangling tree aea790b9a58f6cf6f2804eeac9f0abbe9631e4c9
|
|
858
|
-
dangling blob 7108f7ecb345ee9d0084193f147cdad4d2998293</code></pre>
|
|
859
|
-
</div>
|
|
860
|
-
</div>
|
|
861
|
-
<div class="paragraph">
|
|
862
|
-
<p>In this case, you can see your missing commit after the string “dangling commit”.
|
|
863
|
-
You can recover it the same way, by adding a branch that points to that SHA-1.</p>
|
|
864
|
-
</div>
|
|
865
|
-
</div>
|
|
866
|
-
<div class="sect3">
|
|
867
|
-
<h3 id="_removing_objects">Removing Objects</h3>
|
|
868
|
-
<div class="paragraph">
|
|
869
|
-
<p>There are a lot of great things about Git, but one feature that can cause issues is the fact that a <code>git clone</code> downloads the entire history of the project, including every version of every file.
|
|
870
|
-
This is fine if the whole thing is source code, because Git is highly optimized to compress that data efficiently.
|
|
871
|
-
However, if someone at any point in the history of your project added a single huge file, every clone for all time will be forced to download that large file, even if it was removed from the project in the very next commit.
|
|
872
|
-
Because it’s reachable from the history, it will always be there.</p>
|
|
873
|
-
</div>
|
|
874
|
-
<div class="paragraph">
|
|
875
|
-
<p>This can be a huge problem when you’re converting Subversion or Perforce repositories into Git.
|
|
876
|
-
Because you don’t download the whole history in those systems, this type of addition carries few consequences.
|
|
877
|
-
If you did an import from another system or otherwise find that your repository is much larger than it should be, here is how you can find and remove large objects.</p>
|
|
878
|
-
</div>
|
|
879
|
-
<div class="paragraph">
|
|
880
|
-
<p><strong>Be warned: this technique is destructive to your commit history.</strong>
|
|
881
|
-
It rewrites every commit object since the earliest tree you have to modify to remove a large file reference.
|
|
882
|
-
If you do this immediately after an import, before anyone has started to base work on the commit, you’re fine – otherwise, you have to notify all contributors that they must rebase their work onto your new commits.</p>
|
|
883
|
-
</div>
|
|
884
|
-
<div class="paragraph">
|
|
885
|
-
<p>To demonstrate, you’ll add a large file into your test repository, remove it in the next commit, find it, and remove it permanently from the repository.
|
|
886
|
-
First, add a large object to your history:</p>
|
|
887
|
-
</div>
|
|
888
|
-
<div class="listingblock">
|
|
889
|
-
<div class="content">
|
|
890
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ curl -L https://www.kernel.org/pub/software/scm/git/git-2.1.0.tar.gz > git.tgz
|
|
891
|
-
$ git add git.tgz
|
|
892
|
-
$ git commit -m 'Add git tarball'
|
|
893
|
-
[master 7b30847] Add git tarball
|
|
894
|
-
1 file changed, 0 insertions(+), 0 deletions(-)
|
|
895
|
-
create mode 100644 git.tgz</code></pre>
|
|
896
|
-
</div>
|
|
897
|
-
</div>
|
|
898
|
-
<div class="paragraph">
|
|
899
|
-
<p>Oops – you didn’t want to add a huge tarball to your project.
|
|
900
|
-
Better get rid of it:</p>
|
|
901
|
-
</div>
|
|
902
|
-
<div class="listingblock">
|
|
903
|
-
<div class="content">
|
|
904
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git rm git.tgz
|
|
905
|
-
rm 'git.tgz'
|
|
906
|
-
$ git commit -m 'Oops - remove large tarball'
|
|
907
|
-
[master dadf725] Oops - remove large tarball
|
|
908
|
-
1 file changed, 0 insertions(+), 0 deletions(-)
|
|
909
|
-
delete mode 100644 git.tgz</code></pre>
|
|
910
|
-
</div>
|
|
911
|
-
</div>
|
|
912
|
-
<div class="paragraph">
|
|
913
|
-
<p>Now, <code>gc</code> your database and see how much space you’re using:</p>
|
|
914
|
-
</div>
|
|
915
|
-
<div class="listingblock">
|
|
916
|
-
<div class="content">
|
|
917
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git gc
|
|
918
|
-
Counting objects: 17, done.
|
|
919
|
-
Delta compression using up to 8 threads.
|
|
920
|
-
Compressing objects: 100% (13/13), done.
|
|
921
|
-
Writing objects: 100% (17/17), done.
|
|
922
|
-
Total 17 (delta 1), reused 10 (delta 0)</code></pre>
|
|
923
|
-
</div>
|
|
924
|
-
</div>
|
|
925
|
-
<div class="paragraph">
|
|
926
|
-
<p>You can run the <code>count-objects</code> command to quickly see how much space you’re using:</p>
|
|
927
|
-
</div>
|
|
928
|
-
<div class="listingblock">
|
|
929
|
-
<div class="content">
|
|
930
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git count-objects -v
|
|
931
|
-
count: 7
|
|
932
|
-
size: 32
|
|
933
|
-
in-pack: 17
|
|
934
|
-
packs: 1
|
|
935
|
-
size-pack: 4868
|
|
936
|
-
prune-packable: 0
|
|
937
|
-
garbage: 0
|
|
938
|
-
size-garbage: 0</code></pre>
|
|
939
|
-
</div>
|
|
940
|
-
</div>
|
|
941
|
-
<div class="paragraph">
|
|
942
|
-
<p>The <code>size-pack</code> entry is the size of your packfiles in kilobytes, so you’re using almost 5MB.
|
|
943
|
-
Before the last commit, you were using closer to 2K – clearly, removing the file from the previous commit didn’t remove it from your history.
|
|
944
|
-
Every time anyone clones this repository, they will have to clone all 5MB just to get this tiny project, because you accidentally added a big file.
|
|
945
|
-
Let’s get rid of it.</p>
|
|
946
|
-
</div>
|
|
947
|
-
<div class="paragraph">
|
|
948
|
-
<p>First you have to find it.
|
|
949
|
-
In this case, you already know what file it is.
|
|
950
|
-
But suppose you didn’t; how would you identify what file or files were taking up so much space?
|
|
951
|
-
If you run <code>git gc</code>, all the objects are in a packfile; you can identify the big objects by running another plumbing command called <code>git verify-pack</code> and sorting on the third field in the output, which is file size.
|
|
952
|
-
You can also pipe it through the <code>tail</code> command because you’re only interested in the last few largest files:</p>
|
|
953
|
-
</div>
|
|
954
|
-
<div class="listingblock">
|
|
955
|
-
<div class="content">
|
|
956
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git verify-pack -v .git/objects/pack/pack-29…69.idx \
|
|
957
|
-
| sort -k 3 -n \
|
|
958
|
-
| tail -3
|
|
959
|
-
dadf7258d699da2c8d89b09ef6670edb7d5f91b4 commit 229 159 12
|
|
960
|
-
033b4468fa6b2a9547a70d88d1bbe8bf3f9ed0d5 blob 22044 5792 4977696
|
|
961
|
-
82c99a3e86bb1267b236a4b6eff7868d97489af1 blob 4975916 4976258 1438</code></pre>
|
|
962
|
-
</div>
|
|
963
|
-
</div>
|
|
964
|
-
<div class="paragraph">
|
|
965
|
-
<p>The big object is at the bottom: 5MB.
|
|
966
|
-
To find out what file it is, you’ll use the <code>rev-list</code> command, which you used briefly in <a href="_enforcing_commit_message_format.html">Enforcing a Specific Commit-Message Format</a>.
|
|
967
|
-
If you pass <code>--objects</code> to <code>rev-list</code>, it lists all the commit SHA-1s and also the blob SHA-1s with the file paths associated with them.
|
|
968
|
-
You can use this to find your blob’s name:</p>
|
|
969
|
-
</div>
|
|
970
|
-
<div class="listingblock">
|
|
971
|
-
<div class="content">
|
|
972
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git rev-list --objects --all | grep 82c99a3
|
|
973
|
-
82c99a3e86bb1267b236a4b6eff7868d97489af1 git.tgz</code></pre>
|
|
974
|
-
</div>
|
|
975
|
-
</div>
|
|
976
|
-
<div class="paragraph">
|
|
977
|
-
<p>Now, you need to remove this file from all trees in your past.
|
|
978
|
-
You can easily see what commits modified this file:</p>
|
|
979
|
-
</div>
|
|
980
|
-
<div class="listingblock">
|
|
981
|
-
<div class="content">
|
|
982
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git log --oneline --branches -- git.tgz
|
|
983
|
-
dadf725 Oops - remove large tarball
|
|
984
|
-
7b30847 Add git tarball</code></pre>
|
|
985
|
-
</div>
|
|
986
|
-
</div>
|
|
987
|
-
<div class="paragraph">
|
|
988
|
-
<p>You must rewrite all the commits downstream from <code>7b30847</code> to fully remove this file from your Git history.
|
|
989
|
-
To do so, you use <code>filter-branch</code>, which you used in <a href="_rewriting_history.html">Rewriting History</a>:</p>
|
|
990
|
-
</div>
|
|
991
|
-
<div class="listingblock">
|
|
992
|
-
<div class="content">
|
|
993
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git filter-branch --index-filter \
|
|
994
|
-
'git rm --ignore-unmatch --cached git.tgz' -- 7b30847^..
|
|
995
|
-
Rewrite 7b30847d080183a1ab7d18fb202473b3096e9f34 (1/2)rm 'git.tgz'
|
|
996
|
-
Rewrite dadf7258d699da2c8d89b09ef6670edb7d5f91b4 (2/2)
|
|
997
|
-
Ref 'refs/heads/master' was rewritten</code></pre>
|
|
998
|
-
</div>
|
|
999
|
-
</div>
|
|
1000
|
-
<div class="paragraph">
|
|
1001
|
-
<p>The <code>--index-filter</code> option is similar to the <code>--tree-filter</code> option used in <a href="_rewriting_history.html">Rewriting History</a>, except that instead of passing a command that modifies files checked out on disk, you’re modifying your staging area or index each time.</p>
|
|
1002
|
-
</div>
|
|
1003
|
-
<div class="paragraph">
|
|
1004
|
-
<p>Rather than remove a specific file with something like <code>rm file</code>, you have to remove it with <code>git rm --cached</code> – you must remove it from the index, not from disk.
|
|
1005
|
-
The reason to do it this way is speed – because Git doesn’t have to check out each revision to disk before running your filter, the process can be much, much faster.
|
|
1006
|
-
You can accomplish the same task with <code>--tree-filter</code> if you want.
|
|
1007
|
-
The <code>--ignore-unmatch</code> option to <code>git rm</code> tells it not to error out if the pattern you’re trying to remove isn’t there.
|
|
1008
|
-
Finally, you ask <code>filter-branch</code> to rewrite your history only from the <code>7b30847</code> commit up, because you know that is where this problem started.
|
|
1009
|
-
Otherwise, it will start from the beginning and will unnecessarily take longer.</p>
|
|
1010
|
-
</div>
|
|
1011
|
-
<div class="paragraph">
|
|
1012
|
-
<p>Your history no longer contains a reference to that file.
|
|
1013
|
-
However, your reflog and a new set of refs that Git added when you did the <code>filter-branch</code> under <code>.git/refs/original</code> still do, so you have to remove them and then repack the database.
|
|
1014
|
-
You need to get rid of anything that has a pointer to those old commits before you repack:</p>
|
|
1015
|
-
</div>
|
|
1016
|
-
<div class="listingblock">
|
|
1017
|
-
<div class="content">
|
|
1018
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ rm -Rf .git/refs/original
|
|
1019
|
-
$ rm -Rf .git/logs/
|
|
1020
|
-
$ git gc
|
|
1021
|
-
Counting objects: 15, done.
|
|
1022
|
-
Delta compression using up to 8 threads.
|
|
1023
|
-
Compressing objects: 100% (11/11), done.
|
|
1024
|
-
Writing objects: 100% (15/15), done.
|
|
1025
|
-
Total 15 (delta 1), reused 12 (delta 0)</code></pre>
|
|
1026
|
-
</div>
|
|
1027
|
-
</div>
|
|
1028
|
-
<div class="paragraph">
|
|
1029
|
-
<p>Let’s see how much space you saved.</p>
|
|
1030
|
-
</div>
|
|
1031
|
-
<div class="listingblock">
|
|
1032
|
-
<div class="content">
|
|
1033
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git count-objects -v
|
|
1034
|
-
count: 11
|
|
1035
|
-
size: 4904
|
|
1036
|
-
in-pack: 15
|
|
1037
|
-
packs: 1
|
|
1038
|
-
size-pack: 8
|
|
1039
|
-
prune-packable: 0
|
|
1040
|
-
garbage: 0
|
|
1041
|
-
size-garbage: 0</code></pre>
|
|
1042
|
-
</div>
|
|
1043
|
-
</div>
|
|
1044
|
-
<div class="paragraph">
|
|
1045
|
-
<p>The packed repository size is down to 8K, which is much better than 5MB.
|
|
1046
|
-
You can see from the size value that the big object is still in your loose objects, so it’s not gone; but it won’t be transferred on a push or subsequent clone, which is what is important.
|
|
1047
|
-
If you really wanted to, you could remove the object completely by running <code>git prune</code> with the <code>--expire</code> option:</p>
|
|
1048
|
-
</div>
|
|
1049
|
-
<div class="listingblock">
|
|
1050
|
-
<div class="content">
|
|
1051
|
-
<pre class="highlight"><code class="language-console" data-lang="console">$ git prune --expire now
|
|
1052
|
-
$ git count-objects -v
|
|
1053
|
-
count: 0
|
|
1054
|
-
size: 0
|
|
1055
|
-
in-pack: 15
|
|
1056
|
-
packs: 1
|
|
1057
|
-
size-pack: 8
|
|
1058
|
-
prune-packable: 0
|
|
1059
|
-
garbage: 0
|
|
1060
|
-
size-garbage: 0</code></pre>
|
|
1061
|
-
</div>
|
|
1062
|
-
</div>
|
|
1063
|
-
</div>
|
|
1064
|
-
<div id="nav"><a href="../Git-Internals-Transfer-Protocols.html">prev</a> | <a href="../Git-Internals-Environment-Variables.html">next</a></div></div>
|
|
1065
|
-
</div>
|
|
1066
|
-
|
|
1067
|
-
</div>
|
|
1068
|
-
</div>
|
|
1069
|
-
<footer>
|
|
1070
|
-
<div class="site-source">
|
|
1071
|
-
<a href="https://git-scm.com/site">About this site</a><br>
|
|
1072
|
-
Patches, suggestions, and comments are welcome.
|
|
1073
|
-
</div>
|
|
1074
|
-
<div class="sfc-member">
|
|
1075
|
-
Git is a member of <a href="https://git-scm.com/sfc">Software Freedom Conservancy</a>
|
|
1076
|
-
</div>
|
|
1077
|
-
</footer>
|
|
1078
|
-
<a href="_git_gc.html#top" class="no-js scrollToTop" id="scrollToTop" data-label="Scroll to top">
|
|
1079
|
-
<img src="../../../../images/icons/chevron-up@2x.png" width="20" height="20" alt="scroll-to-top"/>
|
|
1080
|
-
</a>
|
|
1081
|
-
<script src="../../../../assets/application-38b0d42ff05ffea45841edebbd14b75b89585646153808e82907c2c5c11f324b.js"></script>
|
|
1082
|
-
|
|
1083
|
-
</div>
|
|
1084
|
-
|
|
1085
|
-
</body>
|
|
1086
|
-
</html>
|