Presentato rilascio di un sistema distribuito di gestione dei testi sorgente Git 2.54. Git si distingue per le elevate prestazioni e offre strumenti per lo sviluppo non lineare basati su diramazioni e fusioni dei rami. Per garantire l'integrità della cronologia e la resilienza ai cambiamenti retroattivi, viene utilizzato l'hashing implicito dell'intera cronologia precedente in ogni commit, insieme alla certificazione tramite firme digitali degli sviluppatori per singoli tag e commit. Codice Git è distribuito con licenza GPLv2+.
Rispetto alla versione precedente, nella nuova versione sono state introdotte 770 modifiche, realizzate con la partecipazione di 137 sviluppatori (66 hanno partecipato alla sviluppo di Git per la prima volta).
-
È stato implementato il comando “git history”, che fornisce funzionalità sperimentali per la riscrittura della cronologia delle modifiche, più semplici e sicure da utilizzare rispetto al ribasamento dei commit con il comando git rebase. Sono disponibili due operazioni:
- git history reword per riscrivere il messaggio del commit specificato senza modificare l'albero di lavoro e l'indice (ad eccezione dell'annotazione, il resto rimane invariato). Ad esempio, per correggere un refuso.
- git history split per suddividere interattivamente il commit specificato in due commit diversi, spostando parti selezionate dal commit originale in un commit aggiuntivo.
Nei futuri rilasci ci si aspetta l'aggiunta di ulteriori comandi: git history fixup per correggere un commit, git history drop per eliminare un commit, git history reorder per modificare l'ordine dei commit e git history squash per unire i commit.
-
È stato implementato un nuovo metodo per definire i gestori (hook) nei file di configurazione. Invece di posizionare script con gestori nella cartella .git/hooks in ogni repository, i comandi per chiamare i gestori possono ora essere specificati direttamente nei file di configurazione. Le impostazioni possono essere associate a un repository o definite nei file di configurazione che si applicano a tutti i repository (/etc/gitconfig) o ai repository dell'utente (~/.gitconfig). È possibile associare più gestori a un evento. Gli script di .git/hooks continuano a essere chiamati, ma vengono eseguiti dopo i gestori definiti nei file di configurazione. Per visualizzare l'elenco dei gestori si deve utilizzare il comando git hook list, e per disattivare selettivamente la chiamata ai gestori – l'impostazione hook..enabled = false:
[hook "linter"] event = pre-commit command = ~\/bin\/linter —cpp20 [hook "no-leaks"] event = pre-commit command = ~\/bin\/leak-detector $ git hook list pre-commit global linter ~\/bin\/linter —cpp20 local no-leaks ~\/bin\/leak-detector
- Nel comando «git maintenance» è attiva per impostazione predefinita la strategia geometric (git config set maintenance.strategy geometric), che consente di ridurre i tempi di manutenzione di grandi monorepository. Rispetto alla strategia precedentemente utilizzata, che impiega la logica del comando git gc, la nuova strategia evita la riconfezione di tutti gli oggetti ed esclude operazioni eccessivamente dispendiose in termini di risorse, come la fusione di tutti i file pack (dove possibile, la fusione avviene a pezzi e senza la pulizia degli oggetti eliminati).
- Il database degli oggetti (ODB) e le relative API sono stati trasferiti a una nuova architettura basata sull'uso di backend plug-in. La ristrutturazione effettuata astrae il formato di archiviazione degli oggetti e consentirà in futuro di implementare funzionalità come backend alternativi e formati di oggetti, ad esempio per una gestione più efficiente di grandi file binari o per ottimizzare il funzionamento di grandi hosting git.
- Nel comando «git repo structure», il quale fornisce informazioni sulla struttura del repository, non solo mostra la dimensione totale, ma presenta anche i più grandi oggetti di ciascun tipo, consentendo di valutare la dimensione senza utilizzare strumenti di terze parti git-sizer.
$ git repo structure … | * Largest objects | | | * Commits | | | * Maximum size [1] | 17.23 KiB | | * Maximum parents [2] | 10 | | * Trees | | | * Maximum size [3] | 58.85 KiB | | * Maximum entries [4] | 1.18 k | | * Blobs | | | * Maximum size [5] | 1019.51 KiB | | * Tags | | | * Maximum size [6] | 7.13 KiB |
- Nel comando «git replay», utilizzato invece di git rebase per ricreare la cronologia sul server senza albero di lavoro, include per impostazione predefinita un aggiornamento atomico dei riferimenti (anziché elencare i comandi update-ref da eseguire manualmente), è stata implementata l'opzione —revert per annullare le modifiche di una serie di commit, è stata prevista la cancellazione dei commit vuoti risultanti e ora è possibile ricreare la cronologia fino al commit radice.
- Nel «git rev-list» e nei comandi simili è stata aggiunta l'opzione —maximal-only per mostrare solo i commit non raggiungibili da altri commit.
- Nel comando «git repo info» è stata aggiunta l'opzione —keys per visualizzare un elenco di tutte le chiavi conosciute.
- Nel comando «git add -p» durante la navigazione tra i blocchi di codice usando i tasti «J» e «K» è stata implementata la marcatura dei blocchi già approvati e saltati. Aggiunta l'opzione —no-auto-advance per disabilitare il passaggio automatico al file successivo, così da poter tornare ai file precedenti prima del commit.
- Ottimizzato l'interfaccia web «gitweb» per l'uso da dispositivi mobili.
- Nel comando «git apply –directory» prima dell'uso è stata garantita la normalizzazione dei percorsi dei file, come .\/un\/..\/normalized\/path.
- Documentata la possibilità di aggiungere comandi personalizzati tramite il posizionamento di file git-<cmd> nella cartella dei file eseguibili.
- Nel comando «git send-email» aggiunta la supporto per certificati client.
- Per il comando «git status» implementata la configurazione status.compareBranches, attraverso la quale è possibile specificare i rami con cui verrà effettuato il confronto del ramo attuale:
[status] compareBranches = @{upstream} @{push}
- Nel «git rebase» aggiunta l'opzione —trailer per semplificare l'aggiunta di metadati a tutti i commit:
git rebase —trailer "Reviewed-by: Test <test@example.com>"`
- Nel comando «git fast-import» aggiunta la possibilità di sostituire le firme per i commit che sono diventate non valide dopo l'importazione.
- Aggiunta la supporto per la compattazione degli indici multipli MIDX (multi-pack index), in cui i piccoli strati dell'indice MIDX con informazioni sulla disponibilità degli oggetti e i relativi file bitmap vengono uniti, riducendo il numero di strati accumulati in repository esistenti da lungo tempo.
- Nel comando git backfill è stata implementata la possibilità di specificare revisioni (intervalli di commit) e maschere di percorso (pathspec) per limitare le parti della cronologia delle modifiche da caricare:
git backfill main~100..main git backfill — ‘*.c’
- Aggiunte forme alternative per invocare il comando git config list – git config -l e git config —list.
- Consentito l'uso di caratteri non-ASCII nei nomi degli alias dei comandi definiti nel file di configurazione:
[alias "fetch"] command = fetch
- È stata modificata la visualizzazione delle firme i cui GPG key sono scaduti, ma che erano valide al momento della firma del commit. Tali firme ora vengono visualizzate come corrette con una nota sulla scadenza della chiave (in precedenza venivano evidenziate in rosso, creando l'impressione di essere errate).
- Quando si accede ai repository tramite HTTP è stata implementata la gestione degli errori con codice 429 (Too Many Requests). Le richieste che si sono concluse con questo errore vengono ora considerate non come un problema fatale, ma come un errore temporaneo, per il quale l'operazione deve essere ripetuta dopo un certo tempo. Il ritardo prima della ripetizione è impostato tramite l'opzione http.retryAfter, il numero di ripetizioni – http.maxRetries, il tempo di attesa – http.maxRetryTime.
Fonte: linux.org.ru
