Fetching paresseux d'objets
Partial clone (--filter) permet à un clone d'omettre certains objets du transfert initial, les fetchant paresseusement quand nécessaires. Le remote promisor tient sa promesse de les fournir à la demande.
Spécifications de filtre
git clone --filter=blob:none url
git clone --filter=blob:limit=1m url
git clone --filter=tree:0 url
git clone --filter=sparse:oid=<oid> url
Comment fonctionne le fetching
git rev-list --objects --missing=allow-promisor HEAD | \
awk '{print $1}' | git cat-file --batch-check
git fetch --refetch
Inspection
git config --get-all remote.origin.partialclonefilter
git rev-list --missing=print HEAD | head
git config --get extensions.partialClone
Avertissements
- Des opérations comme
git log -psur tout l'historique peuvent déclencher des fetches massifs à la demande. - L'usage déconnecté est limité.
- Le serveur doit supporter partial clone (Git 2.22+ ;
uploadpack.allowFilter=true).
Config serveur
[uploadpack]
allowFilter = true
allowAnySHA1InWant = true
Combiner avec sparse
git clone --filter=blob:none --sparse https://example.com/big.git
cd big
git sparse-checkout init --cone --sparse-index
git sparse-checkout set apps/web
git checkout main
Erreurs courantes
Utiliser --filter=tree:0 pour le travail de développement.