Rilascio del sistema di controllo del codice sorgente distribuito Git 2.31

Il sistema di controllo del codice distribuito Git 2.31 è ora disponibile. Git è uno dei sistemi di controllo delle versioni più popolari, affidabili e ad alte prestazioni, che fornisce strumenti di sviluppo flessibili e non lineari basati su branching e merging. Per garantire l’integrità della storia e la resistenza a modifiche retroattive, in ogni commit viene utilizzato l’hashing implicito di tutta la storia precedente; è inoltre possibile certificare i singoli tag e commit con firme digitali degli sviluppatori.

Rispetto alla versione precedente, la nuova versione comprende 679 modifiche, preparate con la partecipazione di 85 sviluppatori, di cui 23 hanno preso parte allo sviluppo per la prima volta. Principali innovazioni:

  • Aggiunto il comando “git Maintenance”, che consente di eseguire interventi periodici su sistemi che non supportano cron. Ad esempio, utilizzando un nuovo comando, è possibile organizzare l'esecuzione periodica del processo di creazione del pacchetto del repository, in modo da non dover attendere fino al blocco del repository quando il processo di creazione del pacchetto viene eseguito automaticamente durante l'esecuzione di vari comandi. Il comando "git Maintenance" consente di eseguire ottimizzazioni e operazioni per mantenere la struttura ottimale del repository in background, senza bloccare la sessione interattiva: una volta ogni ora, viene svolto il lavoro per scaricare in modo proattivo nuovi oggetti dal repository remoto e aggiornare il file con il grafico di commit e il processo di compressione del repository inizia ogni notte.
  • Aggiunto il supporto per il mantenimento di un indice inverso (revindex) su disco per i file pack. Ricordiamo che Git memorizza tutti i dati sotto forma di oggetti, che si trovano in file separati. Per aumentare l'efficienza del lavoro con il repository, gli oggetti vengono inoltre inseriti nei file pack, in cui le informazioni vengono presentate sotto forma di un flusso di oggetti uno dopo l'altro (un formato simile viene utilizzato quando si trasferiscono oggetti con git fetch e git push comandi). Per ogni file pack viene creato un file indice (.idx), che consente di determinare molto rapidamente l'offset nel file pack in cui è memorizzato l'oggetto specificato utilizzando l'identificatore dell'oggetto. Introdotto in Git 2.31, l'indice inverso (.rev) ha lo scopo di ottimizzare il processo di determinazione di un identificatore di oggetto dalle informazioni sul posizionamento di un oggetto in un file di pacchetto.

    In precedenza, tale conversione veniva eseguita al volo durante l'analisi del file pack ed era archiviata solo in memoria, il che non consentiva il riutilizzo di indici simili e imponeva la generazione dell'indice ogni volta. L'operazione di creazione di un indice si riduce alla costruzione di un array di coppie oggetto-posizione e al suo ordinamento per posizione, il che può richiedere molto tempo per file pack di grandi dimensioni.

    Ad esempio, un'operazione per visualizzare il contenuto degli oggetti, che utilizza un indice diretto, è stata 62 volte più veloce di un'operazione per visualizzare la dimensione degli oggetti, per la quale i dati dalla posizione all'oggetto non erano indicizzati. Dopo aver utilizzato l'indice inverso, queste operazioni hanno iniziato a richiedere all'incirca lo stesso tempo. Gli indici inversi consentono inoltre di velocizzare le operazioni di invio degli oggetti durante l'esecuzione dei comandi fetch e push trasferendo direttamente i 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 quindi comprimere il repository con il comando “git repack -Ad”.

  • Aggiunte ottimizzazioni delle prestazioni in base all'aspetto nel formato file commit-graph, utilizzato per ottimizzare l'accesso alle informazioni sui commit, nuovi dati sul numero di generazione del commit, che possono essere utilizzati per accelerare operazioni aggiuntive con i commit.
  • Aggiunte opzioni per ridefinire il nome del ramo principale utilizzato di default nei nuovi repository (impostazione init.defaultBranch). Quando si accede a repository esterni, git tenta di controllare il ramo indicato da HEAD, ad es. se il server esterno utilizza il ramo "main" per impostazione predefinita, l'operazione "git clone" tenterà di estrarre "main" localmente. Git 2.31 ora supporta questo tipo di checkout per i repository vuoti. Ad esempio, quando si clona un nuovo repository localmente prima di aggiungervi le prime patch, la copia locale ora conterrà il nome upstream predefinito impostato sul server esterno.
  • Aggiunta un'opzione --disk-usage al comando "git rev-list" per fornire un riepilogo della dimensione degli oggetti.
  • In previsione dell'imminente modifica al backend di fusione, il rilevamento della ridenominazione è stato notevolmente ottimizzato.
  • Il supporto per la libreria di espressioni regolari legacy PCRE1 è stato interrotto.
  • È possibile vietare con la forza l'uso di collegamenti abbreviati, indipendentemente dall'algoritmo di hashing. Il divieto viene abilitato assegnando il valore “no” al parametro core.abbrev.
  • Aggiunta l'opzione "--path-format=(absolute|relative)" al comando "git rev-parse" per specificare esplicitamente se devono essere restituiti percorsi relativi o assoluti.
  • Gli script di completamento Bash semplificano l'aggiunta di regole di completamento per i tuoi sottocomandi "git".
  • Aggiunta un'opzione --stdin al comando "git bundle" per leggere i riferimenti dal flusso di input standard.
  • Una nuova opzione è stata aggiunta al comando "git log": "--diff-merges=" "
  • Aggiunta l'opzione "--deduplicatecan" al comando "git ls-files" per eliminare l'output duplicato.
  • Aggiunte nuove maschere per escludere una serie di commit - " ^!” E " ^- "
  • Aggiunte le opzioni "--left-only" e "--right-only" al comando "git range-diff" per mostrare solo un lato dell'intervallo confrontato.
  • Aggiunte le opzioni --skip-to= ai comandi "git diff" e "git log". " e "—ruota-verso= » per saltare o spostarsi alla fine dei percorsi di partenza.
  • Aggiunta l'opzione "--skip-to=" al comando "git difftool". » per riprendere una sessione interrotta da un percorso casuale.
  • Il Codice di condotta, che definisce i principi base per la risoluzione delle situazioni di conflitto tra sviluppatori, è stato aggiornato alla versione 2.0 (in precedenza veniva utilizzata la versione 1.4).

    Fonte: opennet.ru

Aggiungi un commento