È stata rilasciata la versione 2.38 del sistema distribuito di gestione del codice sorgente Git. Git è uno dei sistemi di controllo versione più popolari, affidabili e performanti, fornendo strumenti flessibili per lo sviluppo non lineare basati su branching e merging. Per garantire l'integrità della storia e la resilienza alle modifiche retroattive, viene utilizzato un hashing implicito dell'intera storia precedente in ogni commit; è anche possibile la certificazione tramite firme digitali degli sviluppatori per singoli tag e commit.
Rispetto alla versione precedente, la nuova versione include 699 modifiche, preparate con la partecipazione di 92 sviluppatori, di cui 24 hanno partecipato per la prima volta allo sviluppo. Le principali novità sono:
- Nel core è stata inclusa l'utility "scalar", sviluppata da Microsoft per gestire grandi repository. L'utility è stata inizialmente scritta in C#, ma la versione inclusa in git è stata riscritta in C. La nuova utility si differenzia dal comando git per l'inclusione predefinita di funzionalità e impostazioni aggiuntive che influenzano le performance nella gestione di repository molto grandi. Ad esempio, utilizzando scalar vengono applicati:
- Clonazione parziale per lavorare con una copia incompleta del repository.
- Un meccanismo integrato per il tracciamento delle modifiche nel file system (FSMonitor), che consente di evitare la scansione dell'intero catalogo di lavoro.
- Indici che coprono oggetti in diversi pacchetti (multi-pack).
- File commit-graph con indice del grafo dei commit, utilizzato per ottimizzare l'accesso alle informazioni sui commit.
- Operazioni periodiche in background per mantenere la struttura ottimale del repository nel background, senza bloccare la sessione interattiva (ogni ora viene eseguita un'operazione di caricamento anticipato di nuovi oggetti dal repository remoto e aggiornamento del file con il grafo dei commit, e ogni notte viene avviato il processo di imballaggio del repository).
- Modalità "sparseCheckoutCone", che limita i modelli consentiti durante la clonazione parziale.
- Nel comando "git rebase" è stata aggiunta l'opzione "—update-refs" per aggiornare i branch dipendenti che si intersecano con i branch spostati, evitando di dover eseguire manualmente operazioni di checkout su ogni branch dipendente per passare al commit richiesto.
- È stata ripristinata la compatibilità del comando «git rm» con indici parziali.
- È stato migliorato il comportamento del comando «git mv A B» quando si sposta un file dall'area di lavoro con indici parziali in un'area esterna dove questa modalità non si applica.
- È stata ottimizzata la formattazione dei file bitmap per lavorare con grandi repository, aggiungendo una tabella di indice opzionale con l'elenco dei commit selezionati e i loro offset.
- Nel comando «git merge-tree» è stata implementata una nuova modalità in cui, sulla base di due commit specificati, viene calcolato un albero con il risultato della fusione, come se le storie di questi commit fossero state unite.
- È stata aggiunta l'impostazione «safe.barerepository» per gestire la possibilità di posizionare repository bare (repository senza area di lavoro) all'interno di altri repository git. Impostando il valore su «explicit», sarà consentito lavorare solo con repository bare collocati nella directory superiore. Per consentire la collocazione di repository bare nelle sottodirectory, è necessario utilizzare il valore «all».
- Nel comando «git grep» è stata aggiunta l'opzione «-m» («—max-count»), simile all'opzione omonima in GNU grep, che consente di limitare il numero di corrispondenze restituite.
- Nel comando «ls-files» è stata implementata l'opzione «—format» per configurare i campi restituiti (ad esempio, è possibile includere il nome dell'oggetto, i permessi, ecc.).
- In «git cat-file», nella visualizzazione del contenuto degli oggetti, è stata implementata la possibilità di tenere conto delle associazioni tra autori e email definite nel file mailmap.
Fonte: opennet.ru
