Dopo tre mesi di sviluppo, è stata rilasciata la versione 2.32 del sistema di gestione distribuita dei sorgenti Git. Git è uno dei sistemi di gestione delle versioni più popolari, affidabili e ad alte prestazioni, che offre strumenti flessibili per lo sviluppo non lineare, basati su ramificazioni e fusioni di rami. Per garantire l'integrità della cronologia e la resistenza alle modifiche retroattive, viene utilizzato l'hashing implicito dell'intera storia precedente in ogni commit; è anche possibile la certificazione delle firme digitali degli sviluppatori per singoli tag e commit.
Rispetto alla versione precedente, in questa nuova versione sono state accettate 617 modifiche, realizzate da 100 sviluppatori, di cui 35 hanno partecipato per la prima volta allo sviluppo. Le principali novità sono:
- È stata aggiunta all comando "git commit" l'opzione "—trailer [=]", che semplifica l'allegato di informazioni strutturate (trailer) al commit in formato chiave/valore, che può poi essere elaborato con il comando "interpret-trailers".
- Invece del meccanismo GIT_CONFIG_NOSYSTEM, utilizzato per prevenire la lettura del file di configurazione di sistema condiviso, è stato proposto di utilizzare il meccanismo GIT_CONFIG_SYSTEM, che consente di specificare esplicitamente da quale file caricare le impostazioni di sistema. Inoltre, è stato introdotto il parametro GIT_CONFIG_GLOBAL per sovrascrivere le impostazioni legate ai singoli utenti in $HOME/.gitconfig. Assegnare un valore vuoto alla variabile GIT_CONFIG_SYSTEM cambia il comportamento in modo equivalente a GIT_CONFIG_NOSYSTEM.
- Con l'uso della seconda versione del protocollo di comunicazione di Git, durante l'esecuzione di "git push" è stata implementata la determinazione del comune antenato sul lato ricevente, il che ha consentito di portare l'efficacia di "git push" al livello di "git fetch", escludendo il caricamento di oggetti non necessari.
- È stata aggiunta un'interfaccia IPC semplice, che consente di creare servizi, come fsmonitor.
- È stata interrotta la gestione dei file ".gitattributes", ".gitignore" e ".mailmap", se sono collegamenti simbolici.
- Per il trasporto HTTP è stata aggiunta il supporto per la memorizzazione nella cache della password utilizzata con successo per sbloccare il certificato.
- Nel comando «git stash show» è stata implementata la possibilità di visualizzare la parte non tracciata del repository dei file temporaneamente rimossi.
- È stata proposta una strategia di riimpacchettamento più avanzata nel comando «git repack», che consente di ridurre il consumo di risorse durante il riimpacchettamento.
- Nel comando «git commit» è stata implementata una versione estesa dell'opzione «—fixup» (creazione di un commit per «rebase —autosquash») – «—fixup=(reword|amend):», che offre la scelta di modificare solo il messaggio nel log o sia il messaggio che il contenuto.
- Nel comando «git send-email» è stata considerata l'impostazione della configurazione core.hooksPath.
- In «git format-patch -v» è stato consentito l'uso di contatori che non sono numeri interi.
- Nel «git clone» è stata aggiunta l'opzione «—reject-shallow», che consente di vietare il cloning da repository in modalità shallow (senza la cronologia completa delle modifiche).
- Nell'app «gitweb» è stata aggiunta una modalità per nascondere l'email, sostituendo le stringhe simili a un'email durante l'output.
- È stata modificata la logica di elaborazione del comando «git apply —3way», che ora cerca prima di applicare l'algoritmo di unione a tre vie e solo in caso di fallimento o conflitto torna all'applicazione normale del patch (prima era l'opposto).
- Nella squadra «git apply» è ora consentito specificare contemporaneamente le opzioni «—3way» e «—cached».
- Nei Userdiff sono stati aggiunti modelli per il linguaggio «Scheme».
- Nel comando «git log» è stata aggiunta l'opzione «—diff-merges=» e la configurazione log.diffMerges per selezionare la modalità predefinita.
- Nel comando «git add» e «git rm» è stata aggiunta una protezione aggiuntiva per evitare modifiche ai dati in percorsi al di fuori dell'ambito dell'operazione di clone parziale (sparse checkout).
- Nel comando «git rev-list» è stata aggiunta l'opzione «—filter=object:type=» per escludere un particolare tipo di oggetti dal file pack generato dal comando pack-objects.
- Nel «git pack-objects» è vietato specificare valori negativi nelle opzioni che accettano valori numerici, come «—window» e «—depth».
Fonte: opennet.ru
