How to fix fatal: Server does not support partial clone in Git

GitBEGINNERLOWUpdated Dec 6, 2025ยท 166 views

The 'Server does not support partial clone' error occurs when you try to use Git's partial clone feature (--filter option) against a remote server that hasn't enabled this capability. This is a server-side limitation, not a client issue.

Quick fix

Fixes fatal: Server does not support partial clone

# Check what capabilities the server advertises
git ls-remote --heads <repository-url> 2>&1 | head -20

# For more detailed capability information, use GIT_TRACE
GIT_TRACE_PACKET=1 git ls-remote <repository-url> 2>&1 | grep -i filter
  1. Verify server support by checking capabilities
  2. Use a full clone instead of partial clone
  3. Use shallow clone as an alternative
  4. Request server administrator to enable partial clone
git โ€” error
# Check what capabilities the server advertises
git ls-remote --heads <repository-url> 2>&1 | head -20
# For more detailed capability information, use GIT_TRACE
GIT_TRACE_PACKET=1 git ls-remote <repository-url> 2>&1 | grep -i filter
fatal: Server does not support partial clone

What this error means

The "fatal: Server does not support partial clone" error indicates that the Git server you're connecting to does not have partial clone support enabled. Partial clone is a performance optimization feature introduced in Git 2.19 that allows you to clone a repository without downloading all objects immediately. When you use commands like `git clone --filter=blob:none` or `git clone --filter=tree:0`, you're requesting a partial clone. The client asks the server to only send certain objects (e.g., commits and trees but not blobs), with the expectation that missing objects will be fetched on-demand later when needed. However, partial clone requires both client-side and server-side support. The server must have the `uploadpack.allowFilter` configuration enabled and be running Git 2.18 or later. If the server doesn't advertise this capability, Git will fail with this error rather than silently falling back to a full clone.

Typical symptoms

  • git clone --filter=blob:none fails with 'Server does not support partial clone'
  • git clone --filter=tree:0 produces a fatal error about partial clone support
  • Attempting blobless or treeless clones fails on self-hosted Git servers
  • CI/CD pipelines that use partial clone fail when pointed at certain Git repositories
  • The --filter option works on GitHub/GitLab but fails on older or self-hosted servers
  • Warning message 'filtering not recognized by server, ignoring' appears before failure

Common causes

  1. Remote Git server does not have uploadpack.allowFilter enabled
  2. Git server is running a version older than 2.18 that lacks partial clone support
  3. Self-hosted Git server (Gitea, GitBucket, Gogs) hasn't enabled filter support
  4. Corporate or on-premises Git server has partial clone disabled by administrators
  5. Using an older Bitbucket Server version that predates partial clone support
  6. Server is configured to explicitly deny filter requests for security or performance reasons

How to fix "fatal: Server does not support partial clone"

1Verify server support by checking capabilities

First, check if the server advertises partial clone support by inspecting its capabilities:

bash
# Check what capabilities the server advertises
git ls-remote --heads <repository-url> 2>&1 | head -20

# For more detailed capability information, use GIT_TRACE
GIT_TRACE_PACKET=1 git ls-remote <repository-url> 2>&1 | grep -i filter

If you don't see "filter" in the advertised capabilities, the server doesn't support partial clone.

2Use a full clone instead of partial clone

The simplest workaround is to remove the --filter option and perform a standard full clone:

bash
# Instead of partial clone
# git clone --filter=blob:none https://git.example.com/repo.git

# Use a regular clone
git clone https://git.example.com/repo.git

This downloads all objects but ensures compatibility with any Git server.

3Use shallow clone as an alternative

Shallow clone is an older feature with broader server support. It limits history rather than filtering object types:

bash
# Clone only the most recent commit
git clone --depth 1 https://git.example.com/repo.git

# Clone with limited history (last 10 commits)
git clone --depth 10 https://git.example.com/repo.git

# If you need full history later, you can unshallow
cd repo
git fetch --unshallow

Shallow clones have been supported since Git 1.5 and work with virtually all Git servers.

4Request server administrator to enable partial clone

If you have access to the server or can request changes from administrators, partial clone can be enabled with:

bash
# On the Git server, enable partial clone support
git config --global uploadpack.allowFilter true

# Optionally, allow specific filter types
git config --global uploadpack.allowAnySHA1InWant true

For Gitea servers (1.16+), partial clone is enabled by default. For older versions or explicit configuration:

ini
# In app.ini for Gitea
[git]
DISABLE_PARTIAL_CLONE = false

For GitLab self-hosted, ensure you're running GitLab 12.4+ with Git 2.22+ on the server.

5Check Git server version requirements

Partial clone has specific version requirements on both client and server:

Server Requirements:
- Git 2.18+ for basic partial clone support
- Git 2.20+ for tree filters (--filter=tree:0)
- Git 2.22+ for optimal performance

Platform-Specific Support:
- GitHub.com: Fully supported
- GitHub Enterprise Server: 2.22+
- GitLab.com: Fully supported
- GitLab Self-Managed: 12.4+ with Git 2.22+
- Bitbucket Cloud: Fully supported (as of 2021)
- Bitbucket Data Center: 7.13+
- Azure DevOps: Supported (blobless clones only)
- Gitea: 1.16+ (enabled by default)
- Gogs: Not supported

Check your server version:

bash
# For GitHub Enterprise, GitLab, etc., check the server's Git version
# This is usually shown in the admin panel or via API
6Clone from an alternative mirror with partial clone support

If the primary server doesn't support partial clone, consider using a mirror that does:

bash
# If your repo is mirrored on GitHub, clone from there
git clone --filter=blob:none https://github.com/org/repo.git

# Then add the original remote for pushing
cd repo
git remote add upstream https://internal-git.example.com/org/repo.git
git remote set-url --push origin https://internal-git.example.com/org/repo.git

This gives you the benefits of partial clone while still being able to push to your main server.

7Use sparse checkout for similar benefits

If you only need specific directories, sparse checkout can reduce disk usage without requiring server-side partial clone support:

bash
# Clone with no checkout initially
git clone --no-checkout https://git.example.com/repo.git
cd repo

# Enable sparse checkout
git sparse-checkout init --cone

# Specify which directories you need
git sparse-checkout set src/frontend docs

# Now checkout - only specified directories are populated
git checkout main

This still downloads all Git objects but only populates specified directories in your working tree.

Advanced notes

### Understanding Partial Clone Filter Types

Git supports several filter types, each with different use cases:

| Filter | Command | Effect | Server Requirement |
|--------|---------|--------|-------------------|
| Blobless | --filter=blob:none | Omits all blobs | Git 2.18+ |
| Treeless | --filter=tree:0 | Omits all trees and blobs | Git 2.20+ |
| Blob size limit | --filter=blob:limit=1m | Omits blobs larger than 1MB | Git 2.18+ |
| Sparse | --filter=sparse:oid=<path> | Uses sparse specification | Git 2.18+ |

### Server-Side Configuration Details

For server administrators, here's the complete configuration for enabling partial clone:

bash
# Enable filter capability advertisement
git config --global uploadpack.allowFilter true

# Allow fetching any SHA (needed for some partial clone operations)
git config --global uploadpack.allowAnySHA1InWant true

# Fine-grained control over filter types
git config --global uploadpack.filter.allow true
git config --global uploadpack.filter.blob:none.allow true
git config --global uploadpack.filter.blob:limit.allow true
git config --global uploadpack.filter.tree.allow true

### Partial Clone vs Shallow Clone Comparison

| Feature | Partial Clone | Shallow Clone |
|---------|---------------|---------------|
| History | Complete | Limited depth |
| On-demand fetch | Yes | No |
| Git blame | Works (fetches as needed) | May not work fully |
| Server requirement | Git 2.18+ | Git 1.5+ |
| Disk savings | Objects not in filter | History before depth |

### CI/CD Pipeline Considerations

When using partial clone in CI/CD:

yaml
# GitHub Actions - partial clone works
- uses: actions/checkout@v4
  with:
    filter: blob:none

# For servers without support, fall back to shallow
- uses: actions/checkout@v4
  with:
    fetch-depth: 1

### Checking Server Capabilities Programmatically

bash
# Detailed capability check
GIT_TRACE_PACKET=1 git ls-remote <url> 2>&1 | grep -E "(filter|partial)"

# If this returns nothing, partial clone is not supported

### Protocol Version Considerations

Partial clone requires Git protocol version 2 for optimal operation:

bash
# Ensure protocol v2 is enabled
git config --global protocol.version 2

Some older servers may only support protocol v1, which has limited partial clone support.

Frequently asked questions

What does "fatal: Server does not support partial clone" mean?
The "fatal: Server does not support partial clone" error indicates that the Git server you're connecting to does not have partial clone support enabled. 19 that allows you to clone a repository without downloading all objects immediately. When you use commands like git clone --filter=blob:none or git clone --filter=tree:0, you're requesting a partial clone.
How do I fix "fatal: Server does not support partial clone"?
The 'Server does not support partial clone' error occurs when you try to use Git's partial clone feature (--filter option) against a remote server that hasn't enabled this capability. This is a server-side limitation, not a client issue.
What causes "fatal: Server does not support partial clone"?
Remote Git server does not have uploadpack.allowFilter enabled Git server is running a version older than 2.18 that lacks partial clone support Self-hosted Git server (Gitea, GitBucket, Gogs) hasn't enabled filter support
Is the "fatal: Server does not support partial clone" error serious?
It is a low-severity error โ€” more of a blocker than a risk. The steps above resolve it.

Official resources & further reading