| git-backfill(1) | |
| =============== | |
| NAME | |
| ---- | |
| git-backfill - Download missing objects in a partial clone | |
| SYNOPSIS | |
| -------- | |
| [synopsis] | |
| git backfill [--min-batch-size=<n>] [--[no-]sparse] [--[no-]include-edges] [<revision-range>] | |
| DESCRIPTION | |
| ----------- | |
| Blobless partial clones are created using `git clone --filter=blob:none` | |
| and then configure the local repository such that the Git client avoids | |
| downloading blob objects unless they are required for a local operation. | |
| This initially means that the clone and later fetches download reachable | |
| commits and trees but no blobs. Later operations that change the `HEAD` | |
| pointer, such as `git checkout` or `git merge`, may need to download | |
| missing blobs in order to complete their operation. | |
| In the worst cases, commands that compute blob diffs, such as `git blame`, | |
| become very slow as they download the missing blobs in single-blob | |
| requests to satisfy the missing object as the Git command needs it. This | |
| leads to multiple download requests and no ability for the Git server to | |
| provide delta compression across those objects. | |
| The `git backfill` command provides a way for the user to request that | |
| Git downloads the missing blobs (with optional filters) such that the | |
| missing blobs representing historical versions of files can be downloaded | |
| in batches. The `backfill` command attempts to optimize the request by | |
| grouping blobs that appear at the same path, hopefully leading to good | |
| delta compression in the packfile sent by the server. | |
| In this way, `git backfill` provides a mechanism to break a large clone | |
| into smaller chunks. Starting with a blobless partial clone with `git | |
| clone --filter=blob:none` and then running `git backfill` in the local | |
| repository provides a way to download all reachable objects in several | |
| smaller network calls than downloading the entire repository at clone | |
| time. | |
| By default, `git backfill` downloads all blobs reachable from the `HEAD` | |
| commit. This set can be restricted or expanded using various options below. | |
| THIS COMMAND IS EXPERIMENTAL. ITS BEHAVIOR MAY CHANGE IN THE FUTURE. | |
| OPTIONS | |
| ------- | |
| `--min-batch-size=<n>`:: | |
| Specify a minimum size for a batch of missing objects to request | |
| from the server. This size may be exceeded by the last set of | |
| blobs seen at a given path. The default minimum batch size is | |
| 50,000. | |
| `--sparse`:: | |
| `--no-sparse`:: | |
| Only download objects if they appear at a path that matches the | |
| current sparse-checkout. If the sparse-checkout feature is enabled, | |
| then `--sparse` is assumed and can be disabled with `--no-sparse`. | |
| `--include-edges`:: | |
| `--no-include-edges`:: | |
| Include blobs from boundary commits in the backfill. Useful in | |
| preparation for commands like `git log -p A..B` or `git replay | |
| --onto TARGET A..B`, where A..B normally excludes A but you need | |
| the blobs from A as well. `--include-edges` is the default. | |
| `<revision-range>`:: | |
| Backfill only blobs reachable from commits in the specified | |
| revision range. When no _<revision-range>_ is specified, it | |
| defaults to `HEAD` (i.e. the whole history leading to the | |
| current commit). For a complete list of ways to spell | |
| _<revision-range>_, see the "Specifying Ranges" section of | |
| linkgit:gitrevisions[7]. | |
| + | |
| You may also use commit-limiting options understood by | |
| linkgit:git-rev-list[1] such as `--first-parent`, `--since`, or pathspecs. | |
| + | |
| Most `--filter=<spec>` options don't work with the purpose of | |
| `git backfill`, but the `sparse:<oid>` filter is integrated to provide a | |
| focused set of paths to download, distinct from the `--sparse` option. | |
| SEE ALSO | |
| -------- | |
| linkgit:git-clone[1], | |
| linkgit:git-rev-list[1] | |
| GIT | |
| --- | |
| Part of the linkgit:git[1] suite |