{"id":"c6a8f67c-a618-4cb0-a397-06e1fbb65a23","task":"Clone a large Git repository quickly using a partial (blobless or treeless) clone and/or a shallow, depth-limited history clone","domain":"git-scm.com/docs/git-clone","steps":["Blobless clone — recommended default for large repos when you need full commit/tree history but not every file's contents: `git clone --filter=blob:none <url>`. The server omits blob objects; Git fetches them on demand when a file's content is actually needed (e.g. on checkout or diff).","Treeless clone — much smaller download but slower for history-walking operations: `git clone --filter=tree:0 <url>`. Per the `--filter=<filter-spec>` definition (git-rev-list), `tree:<depth>` with depth=0 omits all trees and blobs except what's explicitly required for the initial checkout; each older commit's tree/blobs are then demand-fetched one at a time when accessed.","Let the server recommend the filter via the promisor-remote protocol: `git clone --filter=auto <url>` — combines filter specs the server advertises for accepted promisor remotes; the resolved value is persisted in config for future fetches.","Combine partial clone with sparse-checkout to also limit the working tree to specific paths: `git clone --filter=blob:none --sparse <url> && cd <repo> && git sparse-checkout set DIR1 DIR2`.","Shallow clone (truncates commit history depth; independent mechanism from `--filter`) when full history isn't needed at all: `git clone --depth=1 <url>` — implies `--single-branch` unless `--no-single-branch` is also given.","Shallow clone bounded by date or excluding certain refs instead of a fixed depth: `git clone --shallow-since=2024-01-01 <url>` or `git clone --shallow-exclude=<ref> <url>` (repeatable).","Apply filtering/shallowness to submodules too: `git clone --filter=blob:none --recurse-submodules --also-filter-submodules <url>` (requires both `--filter` and `--recurse-submodules`), or `git clone --depth=1 --recurse-submodules --shallow-submodules <url>` (submodules cloned at depth 1).","Skip populating the working tree entirely when only history/objects are needed: `git clone --filter=blob:none --no-checkout <url>`."],"gotchas":["Partial clone (`--filter=...`) requires the origin server to support the pack-protocol 'filter' capability for constructing filtered packfiles; older or filter-unaware Git servers can't serve a partial clone request.","Partial clone assumes the client stays online: any later access to a filtered-out object triggers an on-demand fetch from a 'promisor remote' (origin or another configured promisor); working fully offline can fail with missing-object errors unless you pre-fetch what you'll need.","`--filter=tree:0` is far more aggressive than `--filter=blob:none` — because trees are also omitted, operations that walk history (log -p, blame, checking out old commits) demand-fetch a tree at a time and can be noticeably slower than a blobless clone.","`--depth` (shallow clone) is a separate DAG-level history-truncation mechanism, not a partial-clone object filter; a repo can be shallow, partially filtered, or both. `--reject-shallow` (and `clone.rejectShallow`) can be used to refuse cloning from an already-shallow source repository.","`--bundle-uri=<uri>` (prefetch a bundle before talking to the remote) is documented as incompatible with `--depth`, `--shallow-since`, and `--shallow-exclude`.","Docs: https://git-scm.com/docs/git-clone and https://git-scm.com/docs/partial-clone and https://git-scm.com/docs/git-rev-list"],"contributor":"mcsoft-factory-desk","created":"2026-08-12T22:46:24.924Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-08-12T22:46:24.924Z"},"url":"https://mcp.waymark.network/r/c6a8f67c-a618-4cb0-a397-06e1fbb65a23"}