Dopo tre mesi di sviluppo, è stata pubblicata la versione 2.46 del sistema di gestione distribuita dei codici 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 basato su ramificazione e fusione. Per garantire l'integrità della cronologia e la resistenza alle modifiche retroattive, viene utilizzato un hashing implicito dell'intera cronologia precedente in ogni commit; è anche possibile verificare tramite firme digitali gli sviluppatori di singoli tag e commit. Il codice di Git è distribuito sotto la licenza GPLv2+.
Rispetto alla versione precedente, nella nuova versione sono stati incorporati 746 cambiamenti, realizzati con la partecipazione di 96 sviluppatori, di cui 31 partecipano per la prima volta allo sviluppo. Novità principali:
- È stata aggiunta un supporto sperimentale per un nuovo tipo di bitmap: il "pseudo-merge reachability bitmap", che, a differenza della struttura "reachability bitmap", memorizza i dati sui set di oggetti correlati ai commit non legati a ciascun singolo commit, ma associati direttamente a più commit. Questa organizzazione consente di utilizzare una sola bitmap per determinare gli oggetti dei commit in rami diversi, il che, in repository di grandi dimensioni, permette di evitare la creazione di un gran numero di bitmap separate e accelera notevolmente l'iterazione sugli oggetti per determinare quali oggetti devono essere inviati al client durante operazioni come "git fetch", "git rev-list" e "git clone". Per attivare il nuovo tipo di bitmap e definire la logica per la loro 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 a riga di comando per il comando «git config», in cui, invece di varie opzioni per visualizzare, rinominare ed eliminare impostazioni e sezioni, come «—get», «—get-all», «—unset» e «—remove-section», è stato proposto un insieme di sottocomandi distinti. Ad esempio, per elencare tutte le impostazioni del repository, ora è sufficiente utilizzare il comando «git config list», mentre per visualizzare il contenuto di un parametro specifico si usa il comando «git config get ». Per ulteriori filtraggi dei risultati tramite l'opzione «—regexp», è possibile impostare un filtro basato su espressioni regolari.
- Nel protocollo "credential helper", utilizzato per la trasmissione delle credenziali durante l'accesso a repository con accesso limitato, è stato aggiunto il supporto per i nuovi campi "authtype" e "credential", che consentono di creare gestori per i sistemi di autenticazione HTTP, non limitandosi alla verifica di nome utente e password, ad esempio, con l'uso del Bearer Token in OAuth 2.0. In precedenza, per lavorare con tali sistemi di autenticazione era necessario specificare i dati riservati in chiaro nel parametro http.extraHeader. Inoltre, il protocollo include la possibilità di salvare lo stato di ogni gestore di credenziali per supportare metodi di autenticazione a più fasi, utilizzati in protocolli come NTLM e Kerberos.
- Continua lo sviluppo del backend sperimentale "reftable" per una memorizzazione efficiente nel repository dei riferimenti a branche e tag. Questo backend utilizza uno storage a blocchi, impiegato nel progetto JGit e ottimizzato per gestire un numero molto elevato di riferimenti (i formati tradizionali di memorizzazione dei riferimenti portano a costi operativi significativi nei repository con un gran numero di riferimenti a causa della collocazione di un numero molto elevato di file in una singola directory nel caso di memorizzazione dei riferimenti nella directory $GIT_DIR/refs o della necessità di riscrivere un file molto grande ad ogni aggiornamento nel caso di memorizzazione dei riferimenti nel file $GIT_DIR/packed_refs). Nella nuova versione è stata aggiunta la comando «git refs migrate —ref-format=reftable» per trasferire i repository esistenti al backend "reftable" (in precedenza, il backend veniva abilitato solo durante l'inizializzazione del repository).
- Nel comando git è stata aggiunta l'opzione «—no-advice», che disabilita tutti i messaggi di raccomandazione e suggerimenti, il che può rivelarsi utile per evitare di riempire il log con informazioni superflue durante la chiamata automatizzata a git.
- È iniziato il processo di traduzione di alcuni controlli del set di test per utilizzare i test unitari, semplificando il test dei componenti di basso livello e migliorando l'efficienza del processo di test sulla piattaforma Windows, che comporta un alto sovraccarico quando si esegue un numero elevato di processi durante l'esecuzione dei test, implementati come script shell.
- Nel codice per l'analisi delle impostazioni dei colori è stata aggiunta la possibilità di utilizzare la notazione «#RGB» oltre a «#RRGGBB».
Fonte: opennet.ru
