Dopo tre mesi di sviluppo, è stata pubblicata la versione 2.46 del sistema distribuito di gestione del codice sorgente Git. Git è uno dei sistemi di controllo versione più popolari, affidabili e ad alte prestazioni, che fornisce strumenti flessibili per lo sviluppo non lineare, basati su ramificazioni e fusioni di rami. Per garantire l'integrità della cronologia e la resilienza alle modifiche retroattive, viene utilizzato un hashing implicito dell'intera cronologia precedente in ogni commit; è anche possibile verificare digitalmente le firme degli sviluppatori per singoli tag e commit. Il codice di Git è distribuito sotto licenza GPLv2+.
Rispetto alla versione precedente, nella nuova versione sono stati introdotti 746 cambiamenti, preparati con la partecipazione di 96 sviluppatori, di cui 31 partecipano per la prima volta allo sviluppo. Le principali novità:
- Aggiunta la supporto sperimentale per un nuovo tipo di bitmap — "pseudo-merge reachability bitmap", in cui, a differenza della struttura "reachability bitmap", i dati sui set di oggetti relativi ai commit non vengono memorizzati legati a ogni singolo commit, ma legati a più commit contemporaneamente. Questa organizzazione consente di utilizzare una singola bitmap per determinare gli oggetti associati ai commit in rami diversi, il che, in grandi repository, consente di evitare la creazione di un gran numero di bitmap separate e accelera notevolmente la traversata degli oggetti per determinare quali oggetti devono essere inviati al cliente durante operazioni come "git fetch", "git rev-list" e "git clone". Per attivare il nuovo tipo di bitmap e definire la loro logica di selezione e uso, è stata proposta una serie di impostazioni "bitmapPseudoMerge": git config bitmapPseudoMerge.all.pattern ‘refs\/(heads|tags)\/’ git config bitmapPseudoMerge.all.threshold now git config bitmapPseudoMerge.all.stableThreshold never git repack -adb
- È stata implementata una nuova interfaccia della riga di comando per il comando «git config», nella quale, invece di opzioni disgiunte per visualizzare, rinominare e rimuovere impostazioni e sezioni, come «—get», «—get-all», «—unset» e «—remove-section», è stato proposto un insieme di sottocomandi distinti. Ad esempio, per visualizzare tutte le impostazioni del repository ora è possibile utilizzare il comando «git config list», mentre per visualizzare il contenuto di un parametro specifico si usa il comando «git config get ». Per una filtrazione aggiuntiva dei risultati, tramite l'opzione «—regexp», è possibile impostare un filtro basato su espressioni regolari.
- Nel protocollo «credential helper», utilizzato per trasmettere le credenziali quando si accede a repository con accesso limitato, è stata aggiunta la supporto per i nuovi campi «authtype» e «credential», che consentono di creare gestori per sistemi di autenticazione HTTP che non si limitano alla verifica di login e password, come nel caso dell'uso del Bearer Token in OAuth 2.0. In precedenza, per lavorare con tali sistemi di autenticazione era necessario specificare informazioni riservate in chiaro nel parametro http.extraHeader. Inoltre, il protocollo è stata aggiunta la possibilità di salvare lo stato di ciascun gestore delle credenziali per supportare metodi di autenticazione a più fasi utilizzati in protocolli come NTLM e Kerberos.
- È proseguito lo sviluppo del backend sperimentale «reftable» per l'archiviazione efficiente nel repository di riferimenti a rami e tag. Questo backend utilizza uno storage a blocchi, impiegato dal progetto JGit, ed è ottimizzato per la conservazione di un numero molto elevato di riferimenti (i formati tradizionali di archiviazione dei riferimenti comportano costi operativi significativi nei repository con un gran numero di riferimenti, a causa della creazione di un numero molto elevato di file in una singola directory nel caso di archiviazione dei riferimenti nella directory $GIT_DIR/refs, oppure della necessità di sovrascrivere un grande file ad ogni aggiornamento, nel caso di archiviazione dei riferimenti nel file $GIT_DIR/packed_refs). Nella nuova versione è stato aggiunto il comando «git refs migrate —ref-format=reftable» per migrare i repository esistenti al backend «reftable» (in precedenza, il backend veniva attivato solo durante l'inizializzazione del repository).
- È stata aggiunta l'opzione «—no-advice» al comando git, che disattiva tutti i messaggi di raccomandazione e suggerimenti, utile per evitare di riempire il log con informazioni superflue durante la chiamata automatizzata di git.
- È iniziato il processo di conversione di alcuni controlli del set di test all'uso dei test unitari, semplificando il test dei componenti a basso livello e migliorando l'efficienza del processo di testing sulla piattaforma Windows, dove si riscontrano costi elevati nell'avviare un grande numero di processi durante l'esecuzione di test implementati come script shell.
- Nel codice per l'analisi delle impostazioni dei colori è stata aggiunta la possibilità di utilizzare la rappresentazione «#RGB» oltre a «#RRGGBB».
Fonte: opennet.ru
