Presentato rilascio del sistema di gestione distribuita dei testi sorgente Git 2.54. Git offre un'alta prestazione e fornisce strumenti per lo sviluppo non lineare basati su ramificazione e unione di rami. Per garantire l'integrità della storia e la resilienza alle modifiche retroattive, utilizza l'hashing implicito dell'intera storia precedente in ogni commit, così come le firme digitali degli sviluppatori per singoli tag e commit. Codice Git distribuito sotto licenza GPLv2+.
Rispetto alla versione precedente, nella nuova versione sono stati inclusi 770 cambiamenti, preparati con la partecipazione di 137 sviluppatori (66 hanno partecipato per la prima volta allo sviluppo di Git).
-
È stato implementato il comandogit history, che fornisce capacità sperimentali per riscrivere la storia delle modifiche, più semplici e sicure da utilizzare rispetto al rebase dei commit con il comando git rebase. Sono disponibili due operazioni:
- git history reword per riscrivere il messaggio nel commit specificato senza modificare l'albero di lavoro e l'indice (tranne la nota, il resto rimane intatto). Ad esempio, per correggere un errore di battitura.
- git history split per separare interattivamente il commit specificato in due commit distinti, spostando le parti selezionate dal commit originale a un commit aggiuntivo.
Nei futuri rilasci, si prevede di aggiungere ulteriori comandi: git history fixup per correggere un commit, git history drop per rimuovere 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 determinare i gestori (hook) nei file di configurazione. Invece di posizionare gli script con i gestori nella cartella .git/hooks in ogni repository, ora è possibile specificare i comandi per chiamare i gestori direttamente nei file di configurazione. Le impostazioni possono essere collegate a un repository specifico o indicate in file di configurazione che si applicano a tutti i repository (/etc/gitconfig) o ai repository dell'utente (~/.gitconfig). È possibile collegare più gestori a un singolo evento. Gli script presenti in .git/hooks continuano comunque a essere invocati, ma vengono eseguiti dopo i gestori definiti nei file di configurazione. Per visualizzare l'elenco dei gestori, è necessario utilizzare il comando git hook list, e per disattivare selettivamente l'invocazione dei gestori, utilizzare 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» La strategia di mantenimento geometric (git config set maintenance.strategy geometric) è attivata per impostazione predefinita, consentendo di ridurre i tempi di manutenzione dei grandi monorepository. Rispetto alla strategia precedentemente utilizzata, che adottava una logica simile a quella del comando git gc, la nuova strategia evita di ri-pacchettizzare tutti gli oggetti ed esclude operazioni eccessivamente dispendiose di risorse, come la fusione di tutti i file di pack (l'unione avviene per parti e senza la pulizia degli oggetti non più necessari, quando possibile).
- Il database degli oggetti (ODB) e le relative API sono stati trasferiti a una nuova architettura basata sull'uso di backend pluggable. La ristrutturazione effettuata astrae il formato di archiviazione degli oggetti e permetterà in futuro di implementare funzionalità come backend alternativi e formati di oggetti, ad esempio per una memorizzazione più efficiente di file binari di grandi dimensioni o per ottimizzare il funzionamento di grandi hosting git.
- Nel comando «struttura del repo git», che mostra informazioni sulla struttura del repository, garantendo la visualizzazione non solo della dimensione totale, ma anche dei più grandi oggetti di ogni tipo, permettendo di valutare le dimensioni senza utilizzare strumenti esterni. git-sizer.
$ git repo structure … | * Oggetti più grandi | | * Commit | | * Dimensione massima [1] | 17.23 KiB | | * Genitori massimi [2] | 10 | | * Alberi | | * Dimensione massima [3] | 58.85 KiB | | * Voci massime [4] | 1.18 k | | * Blob | | * Dimensione massima [5] | 1019.51 KiB | | * Tag | | * Dimensione massima [6] | 7.13 KiB |
- Nel comando «git replay», usato al posto di git rebase per ricreare la cronologia sul server senza albero di lavoro, include per impostazione predefinita l'aggiornamento atomico dei riferimenti (anziché l'output di un elenco di comandi update-ref da eseguire manualmente), è stata implementata l'opzione —revert per annullare le modifiche da una serie di commit, garantendo l'esclusione dei commit vuoti risultanti e la possibilità di ricreare la cronologia fino al commit radice.
- In ‘git rev-list’ e comandi simili è stata aggiunta l'opzione —maximal-only per visualizzare solo i commit non raggiungibili da altri commit.
- Nel comando ‘git repo info» è stata aggiunta l'opzione —keys per elencare 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, per avere la possibilità di tornare ai file precedenti prima del commit.
- Ottimizzato l'interfaccia web «gitweb» per l'uso sui 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 sottocomandi personalizzati collocando file git- nella cartella con i file eseguibili.
- Nel comando ‘git send-email» aggiunto supporto per certificati client.
- Per il comando «git status» è stata implementata la configurazione status.compareBranches, che consente di specificare i rami con cui confrontare il ramo attuale:
[status] compareBranches = @{upstream} @{push}
- In ‘git rebase» aggiunta l'opzione —trailer per semplificare l'aggiunta di metadati a tutti i commit:
git rebase —trailer "Reviewed-by: Test "`
- Nel comando ‘git fast-import» Aggiunta la possibilità di sostituire le firme per i commit divenuti non validi dopo l'importazione.
- Aggiunta la supporto per la compattazione degli indici multipli MIDX (multi-pack index), che combina i piccoli strati dell'indice MIDX con le informazioni sulla disponibilità degli oggetti e i relativi file bitmap, consentendo di ridurre il numero di strati accumulati nei repository esistenti da 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 scaricate:
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
- Modificato il modo in cui vengono visualizzate le firme con chiavi GPG scadute, ma valide al momento della firma del commit. Queste firme ora vengono visualizzate come corrette con una nota sull'inefficacia della chiave (in precedenza venivano evidenziate in rosso, creando l'impressione di essere non valide).
- Quando si accede ai repository tramite HTTP, viene gestito l'errore con codice 429 (Troppe Richieste). Le richieste che generano questo errore vengono ora considerate non come un problema fatale, ma come un errore temporaneo, per il quale è opportuno ripetere l'operazione dopo un certo intervallo. Il ritardo prima del ripristino è impostato tramite l'opzione http.retryAfter, il numero di ripetizioni – http.maxRetries, e il tempo di attesa – http.maxRetryTime.
Fonte: linux.org.ru
