Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Partial clone and shallow clone reduce Git checkout size in different ways: a shallow clone limits commit history, while a partial clone limits objects transferred initially. Use --depth=1 for recent-only work, --filter=blob:none when file contents can be fetched on demand, and combine either with sparse checkout when path scope also matters.
The right choice depends on what the workflow can omit: old commits, file-content objects, unneeded working-tree paths, or some combination. The distinctions matter because each strategy has different recovery commands, server requirements, and offline behavior.
| # | Preview | Product | Price | |
|---|---|---|---|---|
| 1 |
|
Pro Git | Buy on Amazon | |
| 2 |
|
Pro Git (Expert's Voice in Software Development) | $37.07 | Buy on Amazon |
| 3 |
|
Professional Git | $24.79 | Buy on Amazon |
| 4 |
|
Pro Git 1st (first) edition Text Only | $83.26 | Buy on Amazon |
| 5 |
|
Git: Github Programming, In 8 Hours, For Beginners, Learn Coding Fast: Git Github Language, Crash... | $2.99 | Buy on Amazon |
Key takeaways
- A shallow clone limits commit history, while a partial clone limits which Git objects are downloaded initially.
git clone --depth=1is suited to recent-only checkouts that still need ordinary file contents.git clone --filter=blob:nonekeeps repository structure available while postponing file-content downloads until Git needs them.- Sparse checkout limits the paths populated in the working tree; sparse checkout and partial clone solve different problems and can be combined.
- Partial clones depend on a promisor remote and may need network access when Git requests omitted objects.
What is the difference between partial clone and shallow clone?
Shallow clone limits how much commit history Git transfers; partial clone limits which repository objects Git transfers at clone time. A shallow clone can contain the file contents for its selected, recent commits but omit older ancestors. A partial clone can retain useful commit and tree structure while initially omitting selected file-content blobs or other objects.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
The distinction is easiest to remember as two separate questions:
#1 Best Overall
- Shallow clone: “How much history do I need?”
- Partial clone: “Which objects do I need to download now?”
Git documents partial clone as independent of history-limiting mechanisms such as shallow clone and single-branch fetching. The two techniques can therefore be used separately or together, but one does not automatically provide the other’s limitation. See the official Git partial-clone documentation and git clone documentation for the underlying behavior.
| Decision | Shallow clone | Partial clone | Both together |
|---|---|---|---|
| Primary limit | Commit history | Transferred Git objects | Commit history and selected objects |
| Typical command | git clone --depth=1 <repository> |
git clone --filter=blob:none <repository> |
git clone --depth=1 --filter=blob:none <repository> |
| File contents at the start | Ordinary contents for the fetched history | Some contents may be downloaded later | Contents may be deferred, and history is also truncated |
| Best fit | Recent-only builds, deployments, and temporary workspaces | Large repositories where structure matters but downloading every blob is wasteful | Workflows needing both recent history and deferred content |
| Main risk | History-dependent commands may not work until more history is fetched | Commands that touch omitted objects can trigger network requests | Both shallow-history and on-demand-object limitations apply |
How does a shallow clone work?
A shallow clone creates a repository with a truncated commit history. The --depth value specifies how many commits to retrieve along the selected history, so a depth-one clone starts with the tip rather than all of its ancestors:
git clone --depth=1 https://example.com/project.git
Shallow clone primarily limits commits and their reachable history; it is not a clone without file contents. The working tree normally contains the files associated with the fetched revision. Because --depth implies --single-branch unless --no-single-branch is supplied, a depth-limited clone commonly also narrows the initial branch history. The exact option behavior is documented in Git’s clone reference.
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallCrashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteWhen should you use a shallow clone?
Use a shallow clone when a task needs the current or recent source state but does not need long-range history. Examples include a short-lived continuous-integration workspace, a deployment checkout, or a build environment that only compiles the selected revision. These are workflow matches for a history limit, not universal performance guarantees: the actual transfer and build time depend on the repository, server, Git version, and network.
A branch-specific shallow clone makes the intent explicit:
Rank #2
git clone --depth=1 --single-branch --branch=main https://example.com/project.git
The explicit --single-branch is often redundant when --depth is present, but it makes the requested scope clear to readers and maintainers.
How do you add history to a shallow clone?
You can deepen a shallow repository incrementally or remove its shallow boundary entirely. Run these commands from the local repository:
# Add 100 commits relative to the current shallow boundary
git fetch --deepen=100 origin
# Move the boundary to a date
git fetch --shallow-since=2026-01-01 origin
# Convert to a complete repository when the source is complete
git fetch --unshallow origin
--deepen=100 adds commits relative to the current boundary. --shallow-since changes the boundary by date, and --unshallow requests the complete history when the source repository itself is complete. Git documents these recovery and expansion operations in the git fetch reference.
Deepening is preferable when a job needs only a little more history. Use --unshallow when history-dependent work—such as broad comparison, archaeology, or tools that expect complete ancestry—requires the full repository.
How does a partial clone work?
A partial clone transfers only a selected subset of reachable Git objects. The most common blobless form is:
Rank #3
git clone --filter=blob:none https://example.com/project.git
Git blobs contain file contents. With blob:none, Git initially omits those blobs and can request them later when a command or checkout needs the content. Commit and tree information can remain available, which makes a partial clone fundamentally different from a shallow clone that truncates ancestry.
Free tools Windows power users keep installed
One-click scans. No signup required.
Git’s object-filter syntax also includes blob:limit=<size>, which limits which blobs are transferred by size, and tree:<depth>, which limits selected trees and blobs by tree depth. Multiple filters can be combined; an object must satisfy every filter to be included. The filter forms are described in the Git object-filter documentation.
What is a promisor remote?
A promisor remote is the remote that promises to supply objects omitted by a partial clone. When Git encounters a missing object covered by the partial-clone model, Git can request that object from the promisor remote instead of treating the omission as repository corruption.
This design reduces the initial object transfer while preserving a path to obtain content later. The trade-off is operational: commands that inspect, check out, search, or otherwise touch omitted content may make network requests. The official partial-clone documentation describes the promisor-remote model and the need for that remote to remain available for on-demand retrieval.
Plan for this behavior before using a partial clone offline. If the required blobs have not already been downloaded, an offline command may fail because Git cannot ask the promisor remote for them. A partial clone is therefore most convenient when the repository can reach its remote during normal work, or when the team deliberately prefetches the objects required by an offline task.
What is the difference between partial clone and sparse checkout?
Sparse checkout controls which paths appear in the working tree; partial clone controls which objects are transferred. Sparse checkout alone does not necessarily mean that Git lacks objects belonging to paths outside the selected directories. Partial clone is the mechanism intended to omit selected objects from the initial transfer.
| Feature | What it controls | What it does not guarantee |
|---|---|---|
| Shallow clone | How far commit history extends | That file contents are absent |
| Partial clone | Which Git objects are downloaded initially | That omitted objects will never be downloaded |
| Sparse checkout | Which repository paths are populated in the working tree | That objects for unpopulated paths were never transferred |
Git supports combining filtering and sparse checkout:
git clone --filter=blob:none --sparse https://example.com/project.git
This starts a blobless partial clone and a sparse working tree. The options solve different problems: the filter reduces initial object transfer, while sparse checkout reduces the paths visible in the working tree. Git’s clone documentation covers both options.
Which should you choose: shallow clone or partial clone?
Choose based on whether history or object content is the unnecessary part of the initial checkout.
| Your workflow | Recommended starting point | Reason |
|---|---|---|
| Build or deploy one recent revision | --depth=1 |
The task needs current files but not older commit ancestry. |
| Analyze branches, commits, and trees in a large repository | --filter=blob:none |
The commit and tree structure may matter while file contents can be deferred. |
| Work mainly in one directory of a large repository | --filter=blob:none --sparse |
The initial object transfer and populated working tree can both be focused. |
| Need recent history and want to defer large file contents | --depth=1 --filter=blob:none |
The two independent constraints are useful together. |
| Need complete historical analysis and reliable offline access | Ordinary complete clone, or deepen and prefetch as needed | Shallow boundaries and unpromised objects create avoidable workflow limits. |
A shallow clone is the simpler choice when ordinary file contents are needed immediately and only old history is unnecessary. A partial clone is the better fit when repository structure is valuable but the initial transfer of file contents or deep trees is expensive. Use both only when both constraints genuinely match the workflow.
Best Value
Do not describe either method as always faster or promise a fixed percentage reduction in download size. Savings and later network activity vary with repository shape, filter, server implementation, Git version, and network path. Git’s documentation defines the mechanisms, not a universal reduction figure.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Does the Git server need to support partial clone?
Yes. Partial-clone filtering is not solely a local-client feature. Git protocol version 2 defines a server-advertised filter capability for partial-clone and partial-fetch operations, and the client requests filtering only when the server advertises the relevant capability. The capability model is described in the official Git protocol v2 documentation.
As a result, do not assume that every Git server, mirror, protocol, or hosting configuration supports every filter. Check the documentation for the specific provider and repository service before making a partial clone part of a portable build or developer setup. Provider support can also differ by protocol and configuration, so a successful ordinary clone does not by itself prove that every partial-clone filter is available.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsWhat should you check before using either clone strategy?
- History requirements: Confirm whether the workflow needs tags, merge ancestry, blame history, release comparisons, or only the latest revision.
- Content requirements: Identify whether commands will inspect files outside the initial checkout or trigger retrieval of omitted blobs.
- Connectivity: Keep the promisor remote reachable for partial clones unless all required objects have already been obtained.
- Server capability: Verify that the Git server advertises and supports the requested filtering behavior.
- Automation recovery: Decide whether a shallow job should deepen incrementally or become complete with
git fetch --unshallow. - Working-tree scope: Add sparse checkout when the main goal is to populate selected paths, rather than assuming a clone filter performs that job.
Further Git reading
For a broader Git reference, consider the Pro Git book. The official Pro Git site identifies the book as an Apress publication and notes that print editions are available through Amazon. The book is a general Git reference, not a dedicated handbook for every partial-clone edge case.
Frequently Asked Questions
Is a partial clone the same as a shallow clone?
A shallow clone limits commit history, while a partial clone limits which Git objects are downloaded initially. A shallow clone can still include ordinary file contents for its fetched revision; a partial clone can retain commit and tree structure while postponing file-content blobs.
How do I convert or deepen a shallow Git clone?
Use git fetch --deepen=100 origin to add 100 commits, git fetch --shallow-since=2026-01-01 origin to move the shallow boundary by date, or git fetch --unshallow origin to request complete history when the source repository is complete.
Can I use partial clone and sparse checkout together?
Yes. Use git clone --filter=blob:none --sparse <repository> to combine deferred blob downloads with a working tree initially focused on selected paths. Partial clone limits transferred objects, while sparse checkout limits populated paths.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Can I work offline with a partial clone?
A partial clone may need network access because Git can request omitted objects from its promisor remote when commands need them. Offline work can fail if required objects were not downloaded beforehand.
The Bottom Line
Use --depth=1 when the task needs recent files but not complete history. Use --filter=blob:none when Git’s repository structure matters but downloading all file contents immediately is unnecessary. Add --sparse when only selected paths should populate the working tree, and plan for network access whenever a partial clone must retrieve omitted objects.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

