Clone filters (partial clone)
Git introduces --filter
option to git clone
command, which filters out large files and objects (such as blobs) to create partial clone of a repo. Clone filters are especially useful for large repo and/or metered connection, where full clone (without --filter
) can be expensive (as all history data must be downloaded).
This requires Git version 2.22 or later, both on the Gitea server and on the client. For clone filters to work properly, make sure that Git version on the client is at least the same as on the server (or later). Login to Gitea server as admin and head to Site Administration -> Configuration to see Git version of the server.
By default, clone filters are disabled, which cause the server to ignore --filter
option.
To enable clone filters on per-repo basis, edit the repo’s config
on repository location. Consult ROOT
option on repository
section of Gitea configuration (app.ini
) for the exact location. For example, to enable clone filters for some-repo
, edit /var/gitea/data/gitea-repositories/some-user/some-repo.git/config
and add:
[uploadpack]
allowfilter = true
To enable clone filters globally, add that config above to ~/.gitconfig
of user that run Gitea (for example git
).
Alternatively, you can use git config
to set the option.
To enable for a specific repo:
cd /var/gitea/data/gitea-repositories/some-user/some-repo.git
git config --local uploadpack.allowfilter true
To enable globally, login as user that run Gitea and:
git config --global uploadpack.allowfilter true
See GitHub blog post: Get up to speed with partial clone for common use cases of clone filters (blobless and treeless clones), and Gitlab docs for partial clone for more advanced use cases (such as filter by file size and remove filters to turn partial clone into full clone).