Da Anonimo (non verificato) , 29 Aprile 2026

Due capi di un solo cavo

Le performance di fetch e push dipendono dall'efficienza della negoziazione, dimensione di trasferimento e calcolo lato server.

Da Anonimo (non verificato) , 29 Aprile 2026

Perche maintenance, non gc

git maintenance (Git 2.31+) e il moderno sostituto orientato ai task di gc --auto. Esegue task specifici (commit-graph, prefetch, incremental-repack, loose-objects, pack-refs, gc) su schedulazioni ottimizzate per ognuno, in background, senza bloccare i comandi interattivi.

Da Anonimo (non verificato) , 29 Aprile 2026

Cosa fa gc

git gc esegue manutenzione: ripacka oggetti loose, fa prune di quelli irraggiungibili oltre la finestra di scadenza, impacchetta i ref loose in packed-refs, fa scadere i reflog, e scrive commit-graph e MIDX dove configurato.

Da Anonimo (non verificato) , 29 Aprile 2026

Il costo del repack completo

git gc tradizionale esegue git repack -ad, riscrivendo tutti gli oggetti in un solo packfile. Su repo multi-gigabyte, sono ore di CPU e IO. Il repack geometrico (Git 2.32+) lo evita mantenendo una serie di pack le cui dimensioni seguono una progressione geometrica.

Come funziona

Le dimensioni dei pack formano una sequenza dove ogni pack e almeno N volte piu grande del successivo piu piccolo.

Da Anonimo (non verificato) , 29 Aprile 2026

Il problema delle operazioni sugli insiemi

Operazioni come clone, fetch e gc devono calcolare "quali oggetti sono raggiungibili da questi commit?" — un attraversamento del grafo. Le bitmap di raggiungibilita memorizzano questa risposta come bitmap compresse.

Da Anonimo (non verificato) , 29 Aprile 2026

Il problema dei molti pack

Un repo con molti packfile deve cercare in ognuno per localizzare un oggetto — ricerca binaria per pack. Il multi-pack-index (MIDX) consolida tutti gli indici di pack in una sola ricerca binaria.

Da Anonimo (non verificato) , 29 Aprile 2026

Il problema del log per percorso

git log -- path/to/file deve, in linea di principio, attraversare ogni commit e differire ognuno dal genitore. I Bloom filter changed-path (Git 2.27+) accelerano memorizzando, per ogni commit, un insieme probabilistico di percorsi toccati.

Come funzionano i Bloom filter

Un Bloom filter e una piccola bitmap che restituisce "sicuramente non nell'insieme" o "probabilmente nell'insieme" per le query di membership.

Da Anonimo (non verificato) , 29 Aprile 2026

Il collo di bottiglia della raggiungibilita

Molte operazioni Git devono rispondere a "il commit X e raggiungibile da Y?" o "qual e la merge-base?". Il file commit-graph precalcola puntatori ai genitori, numeri di generazione, e (opzionalmente) Bloom filter in un file binario laterale.

Dove vive

Git vecchio: .git/objects/info/commit-graph. Git nuovo: .git/objects/info/commit-graphs/ (concatenati, scrivibili incrementalmente).

Da Anonimo (non verificato) , 29 Aprile 2026

La facility Trace2

Trace2 (introdotto in Git 2.22) e la facility di tracing strutturato integrata in Git. Emette eventi begin/end di regione, tracking dei processi figli, e informazioni di timing.

Da Anonimo (non verificato) , 29 Aprile 2026

Strumenti lineari, repo esponenziali

Git fu originariamente messo a punto per il kernel Linux — grande per gli standard del 2005 ma minuscolo per quelli odierni. I repo moderni possono contenere milioni di file, centinaia di gigabyte di storia, e decine di migliaia di ref.