Git 2.50: miglioramenti delle prestazioni per repository di grandi dimensioni e altro ancora

git-2.50

Pochi giorni fa è stato annunciato Rilascio della nuova versione del progetto Git 2.50, introducendo più di 600 modifiche grazie a una community attiva che questa volta comprendeva 98 sviluppatori, tra cui 35 nuovi collaboratori.

Questa nuova versione di Git 2.50 è caratterizzata dall'integrazione di nuovi comandi (git-diff-pairs), nuove funzioni per la pulizia, il filtraggio e la manutenzione, la sostituzione del motore di merge ricorsivo con ORT, nonché miglioramenti delle prestazioni e correzioni di bug.

Punti salienti di Git 2.50

In questa nuova versione di Git 2.50, una delle novità più importanti è la ottimizzazione nel trattamento dei cosiddetti "cruft pack", Si tratta di pacchetti di oggetti inaccessibili o non referenziati da branch o tag. Tradizionalmente, Git memorizzava questi oggetti in un unico file di pacchetto di grandi dimensioni, il che poteva causare problemi di prestazioni durante il riconfezionamento di repository con molti di questi elementi.

Con la nuova versione, Git ti consente di dividere questi pacchetti cruft in diversi file più piccoli, che riduce l'utilizzo del disco e migliora le prestazioni di input/output per le operazioni in blocco. Inoltre, se inserisci l'opzione –combine-cruft-below-sizeConsentire combinare piccoli pacchetti in uno in modo più flessibile rispetto alla precedente opzione –max-cruft-size, senza imporre un limite alla dimensione complessiva del file. Questa nuova funzionalità è particolarmente utile nei progetti con oggetti orfani distribuiti su più pacchetti.

Un altro miglioramento mirato ai repository su larga scala è l' supporto sperimentale per l'aggiornamento incrementale di Indici MIDX che Memorizzano le informazioni sugli oggetti in livelli separati Utilizzando file bitmap, è possibile effettuare aggiornamenti più rapidi man mano che vengono aggiunti nuovi commit. Questo progresso è fondamentale per i repository di grandi dimensioni che richiedono operazioni di indicizzazione rapide senza dover ricostruire completamente i metadati.

Sostituzione completa del motore di merge ricorsivo con ORT

Git 2.50 introduce un cambiamento importante con il rimozione permanente del motore di fusione ricorsivo tradizionale. Invece, l'uso dell'ORT è consolidato, un motore a fusione più moderno, manutenibile ed efficiente. ORT non solo offre un'analisi dei conflitti più precisa, ma consente anche di verificare se un merge è possibile senza generare oggetti aggiuntivi. Inoltre, il comando merge-tree ora include l'opzione –quiet per l'utilizzo come verifica silenziosa del merge senza modificare il repository.

gitt-diff-pairs: la soluzione ai problemi di scalabilità

La revisione del codice è senza dubbio uno dei pilastri dello sviluppo collaborativo moderno, e le differenze tra le revisioni svolgono un ruolo importante in questo processo. Con l'arrivo di Git 2.50, è stata introdotta una soluzione progettata per la scalabilità: il nuovo comando git-diff-pairs.

Tradizionalmente, per ottenere un confronto tra due revisioni si utilizza un comando come:

git diff HEAD~1 HEAD

Questo genera una patch completa contenente tutte le modifiche tra le revisioni elencate. Sebbene efficace in molti casi, può rappresentare un problema di prestazioni quando si gestiscono grandi quantità di file modificati.

Ecco perché git-diff-pairs è stato progettato specificamente per ricevere input grezzi direttamente dall'output di git diff-tree e generare le patch corrispondenti in modo efficiente e accurato.

L'utilizzo è semplice:

git diff-tree -r -z -M HEAD~ HEAD | git diff-pairs -z

Questo comando prende le coppie di blob fornite e genera l'output diff esatto, preservando le informazioni contestuali e consentendo di suddividere il lavoro in batch più piccoli. Questo apre le porte all'elaborazione parallela, migliora l'efficienza delle risorse e facilita la scalabilità in strumenti basati su diff come GitLab.

Nuove funzionalità per la pulizia, il filtraggio e la manutenzione

Git 2.50 include diversi strumenti aggiuntivi progettati per migliorare la manutenzione del repository:

  • Il comando è stato aggiunto git reflog drop, che consente di eliminare completamente il reflog per un ramo specifico, ideale per ripulire la cronologia del lavoro quando non è più necessario mantenere i riferimenti precedenti.
  • l'opzione -filtro cat-file –batch è ora disponibile in git, consentendo di filtrare i risultati in base al tipo di oggetto.

Inoltre, vengono evidenziate anche diverse ottimizzazioni interne:

  • Utilizzo migliorato dei collegamenti simbolici, con memorizzazione nella cache dei prefissi e riduzione dei controlli ridondanti.
  • Rimozione delle dipendenze Perl dalla documentazione e dagli script di test, sostituendole con funzioni shell o implementazioni C, rendendole più facili da compilare su sistemi con configurazioni minimaliste.
  • Incluso un controller differenza utente per l'analisi delle differenze nei file .ini.
  • Migliorata la compatibilità del comando git send-email con i server SMTP come Outlook.

Infine, se sei interessato a saperne di più, puoi consultare i dettagli nel seguente link