Dopo tre mesi di sviluppo è stata pubblicata la versione del sistema distribuito di gestione dei testi sorgente Git 2.44. Git è uno dei sistemi di controllo versione più popolari, affidabili e ad alte prestazioni, che offre strumenti flessibili per lo sviluppo non lineare, basati su ramificazioni e fusione di rami. Per garantire l'integrità della cronologia e la resistenza alle modifiche retroattive, viene utilizzato un hashing implicito di tutta la cronologia precedente in ogni commit; è anche possibile certificare con firme digitali singoli tag e commit da parte degli sviluppatori. Il codice di Git è distribuito sotto licenza GPLv2+.
Rispetto alla versione precedente, nella nuova versione sono state accettate 503 modifiche, preparate con la partecipazione di 85 sviluppatori, dei quali 34 hanno partecipato al progetto per la prima volta. Novità principali:
- È stato aggiunto un nuovo comando «git replay», che può essere utilizzato come alternativa a «git rebase» e utilizzerà per ricreare la cronologia su server senza alberi di lavoro (repository bare, senza alberi di lavoro), gestendo più rami contemporaneamente, eseguendo operazioni di rebase per rami diversi da quelli attualmente estratti, o semplicemente per accelerare le operazioni di fusione.
- È stato aggiunto il supporto per il sistema di integrazione continua GitLab CI.
- Nai comandi «git add» e «git stash» è stato aggiunto il supporto degli attributi dei percorsi «:(attr:…)», definiti per analogia con il comando «git show». Ad esempio, «git add ‘:(attr:~binary)'» può essere utilizzato per aggiungere tutti i file di testo (non binari) all'indice. Inoltre, nella nuova versione è stato proposto l'attributo «builtin_objectmode» per filtrare i percorsi dei file in base ai diritti di accesso. Ad esempio, «git add ‘:(attr:builtin_objectmode=100755)'» può essere utilizzato per aggiungere tutti i file eseguibili.
- Aggiunta la possibilità di riutilizzare oggetti distribuiti su più pack-file, per i quali è presente un indice multi-pack con informazioni sulla disponibilità degli oggetti (ottimizzazione che consente di fare riferimento ai dati già presenti nei pack-file invece di trasferirli effettivamente). A partire dalla versione 2.44, git può gestire il riutilizzo di oggetti su più pack-file, senza la necessità di ricompattare il repository in un unico pack-file. Per attivare questa nuova funzionalità, eseguire i seguenti comandi: git config —global pack.allowPackReuse multi git multi-pack-index write —bitmap
dopodiché il numero di pack-file da cui gli oggetti vengono riutilizzati può essere tracciato nel valore "pack-reused … (from N)" visualizzato durante l'esecuzione di "git push".
- Il comando "git rebase —autosquash" ora può essere utilizzato per operazioni di rebase in modalità non interattiva, consentendo di eseguire rebase e applicare rapidamente le correzioni fixup senza ispezionare l'elenco delle modifiche e senza modificare la variabile d'ambiente GIT_SEQUENCE_EDITOR.
- Nel comando "git merge-file" è stata aggiunta l'opzione "—diff-algorithm" per scegliere un algoritmo alternativo di valutazione delle differenze tra i file.
- Nel comando "git checkout -B []" è vietato aggiornare e prelevare branche che utilizzano un altro albero di lavoro. Per ripristinare il comportamento precedente, è stata aggiunta l'opzione "—ignore-other-worktrees".
- È stata aggiunta la possibilità di impostare la configurazione "git config advice.pushAlreadyExists" su "true", rimuovendo dall'output degli avvisi l'istruzione per disabilitarli ("Disabilita questo messaggio con…"), che occupava spazio sullo schermo.
- Ottimizzata l'esecuzione del comando "git for-each-ref" con l'opzione "—no-sort", che ora restituisce un output in ordine non definito (in precedenza, specificando "—no-sort" veniva comunque applicata la ordinamento alfabetico). Dopo le ottimizzazioni, l'uso di "—no-sort" ora accelera "git for-each-ref" di circa il 20% nei repository con un numero elevato di riferimenti.
- Nel backend della gestione delle credenziali wincred è stata aggiunta la compatibilità per l'aggiornamento dei token OAuth, in modo simile a quanto implementato nei backend credential-cache e credential-libsecret.
- Nel "git fetch" è stato aggiunto il supporto per il parametro di configurazione "fetch.all", che verrà elaborato in modo simile all'aggiunta dell'opzione "—all" nella riga di comando.
Fonte: opennet.ru
