Uscita della versione 2.31 del sistema di controllo delle versioni distribuito Git

È disponibile l'uscita della versione 2.31 del sistema di controllo delle versioni distribuito Git. Git è uno dei sistemi di controllo delle versioni più popolari, affidabili e ad alte prestazioni, offrendo strumenti flessibili per lo sviluppo non lineare basato su ramificazioni e unioni. Per garantire l'integrità della cronologia e la resilienza alle modifiche retroattive, viene utilizzato un hashing implicito dell'intera cronologia precedente in ogni commit, ed è possibile anche la verifica tramite firme digitali degli sviluppatori per singoli tag e commit.

Rispetto alla versione precedente, nella nuova versione sono stati inclusi 679 cambiamenti, realizzati con la partecipazione di 85 sviluppatori, di cui 23 hanno partecipato per la prima volta allo sviluppo. Le principali novità:

  • È stata aggiunta la nuova comando «git maintenance», che consente di eseguire operazioni periodiche su sistemi che non supportano cron. Ad esempio, con questo nuovo comando è possibile programmare l'avvio regolare del processo di impacchettamento del repository, evitando di attendere il completamento della blocco del repository durante l'esecuzione automatica dell'imballaggio mentre si eseguono vari comandi. Il comando «git maintenance» permette di effettuare ottimizzazioni e operazioni di mantenimento della struttura del repository in background, senza bloccare la sessione interattiva — ogni ora viene eseguita un'operazione di pre-caricamento di nuovi oggetti dal repository remoto e aggiornamento del file con il grafo dei commit, mentre ogni notte si avvia il processo di impacchettamento del repository.
  • È stata aggiunta la supporto per la gestione dell'indice inverso (revindex) per i file pack. Ricordiamo che Git memorizza tutti i dati sotto forma di oggetti, che vengono archiviati in file separati. Per migliorare l'efficienza nella gestione del repository, gli oggetti vengono ulteriormente collocati in file pack, nei quali le informazioni sono presentate come un flusso di oggetti che seguono uno dopo l'altro (un formato simile è utilizzato durante la trasmissione degli oggetti con i comandi git fetch e git push). Per ciascun file pack viene creato un file indice (.idx), che consente di determinare rapidamente, tramite l'identificatore dell'oggetto, l'offset nel file pack dove è archiviato l'oggetto stesso. L'indice inverso (.rev) introdotto in Git 2.31 è progettato per ottimizzare il processo di identificazione dell'oggetto basandosi sulle informazioni relative alla sua collocazione nel file pack.

    In passato, tale trasformazione veniva eseguita al volo durante l'analisi del file pack e veniva memorizzata solo in memoria, il che impediva il riutilizzo di tali indici e costringeva a generare l'indice ogni volta. L'operazione di costruzione dell'indice consiste nella creazione di un array di coppie "oggetto-posizione" e nella sua ordinazione per posizione, il che può richiedere molto tempo per file pack di grandi dimensioni.

    Ad esempio, l'operazione di output del contenuto degli oggetti, che utilizza un indice diretto, viene eseguita 62 volte più velocemente rispetto all'operazione di visualizzazione delle dimensioni degli oggetti, per la quale i dati di associazione della posizione con l'oggetto non erano indicizzati. Dopo aver utilizzato l'indice inverso, le operazioni indicate hanno iniziato a richiedere tempi simili. Gli indici inversi consentono anche di velocizzare le operazioni di invio degli oggetti durante l'esecuzione dei comandi fetch e push grazie alla trasmissione diretta dei dati già pronti dal disco. Per impostazione predefinita, gli indici inversi non vengono creati; per generarli è necessario abilitare l'impostazione "git config pack.writeReverseIndex true" e successivamente imballare il repository con il comando "git repack -Ad".

  • Sono state aggiunte ottimizzazioni delle prestazioni basate sull'emergere del formato di file commit-graph, utilizzato per ottimizzare l'accesso alle informazioni sui commit, e nuovi dati sul numero di generazione del commit che possono essere utilizzati per accelerare ulteriori operazioni sui commit.
  • Sono state ampliate le possibilità di sovrascrivere il nome del ramo principale utilizzato per impostazione predefinita nei nuovi repository (impostazione init.defaultBranch). Quando si accede a repository esterni, git cerca di estrarre il ramo a cui punta HEAD, cioè se l'esterno un server utilizza per impostazione predefinita il ramo "main", allora l'operazione "git clone" cercherà di estrarre localmente "main". In Git 2.31, il supporto per tale estrazione è ora implementato anche per repository vuoti. Ad esempio, durante la clonazione locale di un nuovo repository prima di aggiungere i primi patch, la copia locale ora conterrà il nome del ramo principale impostato esternamente. server il nome del ramo principale per impostazione predefinita.
  • Nel comando "git rev-list" è stata aggiunta l'opzione "--disk-usage", che consente di visualizzare un riepilogo delle dimensioni degli oggetti.
  • In attesa della prossima sostituzione del backend per gestire le fusioni, è stata notevolmente ottimizzata la definizione dei rinominamenti.
  • È stata interrotta la supporto per la libreria obsoleta di espressioni regolari PCRE1.
  • È stata fornita la possibilità di vietare forzatamente l'uso di link abbreviati, operativo indipendentemente dall'algoritmo di hashing. Il divieto viene attivato impostando il valore «no» al parametro core.abbrev.
  • Nel comando «git rev-parse» è stata aggiunta l'opzione «—path-format=(absolute|relative)» per definire esplicitamente l'output dei percorsi relativi o assoluti.
  • Negli script di completamento automatico in Bash è stata semplificata l'aggiunta di regole di completamento per i set di comandi «git» personalizzati.
  • Nel comando «git bundle» è stata aggiunta l'opzione «—stdin» per leggere i riferimenti dallo standard input.
  • Nel comando «git log» è stata aggiunta una nuova opzione «—diff-merges=<how>».
  • Nel comando «git ls-files» è stata aggiunta l'opzione «—deduplicatecan» per eliminare i duplicati nell'output.
  • Sono state aggiunte nuove maschere per escludere il range di commit — «<rev>^!» e «<rev>^-<n>».
  • Nel comando «git range-diff» sono state aggiunte le opzioni «—left-only» e «—right-only» per mostrare solo un lato del range confrontato.
  • Sono state aggiunte le opzioni «—skip-to=<path>» e «—rotate-to=<path>» ai comandi «git diff» e «git log» per saltare o spostarsi alla fine dei percorsi iniziali.
  • È stata aggiunta l'opzione «—skip-to=<path>» al comando «git difftool» per riprendere una sessione interrotta da un percorso arbitrario.
  • Il Codice di condotta (Code-of-conduct), che definisce i principi fondamentali per la risoluzione dei conflitti tra sviluppatori, è stato aggiornato alla versione 2.0 (in precedenza era in uso la versione 1.4).

    Fonte: opennet.ru
Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster