Dopo tre mesi di sviluppo, è stata pubblicata la versione 2.43 del sistema distribuito di gestione del codice sorgente Git. Git è uno dei sistemi di controllo versione più diffusi, affidabili e ad alte prestazioni, che offre strumenti flessibili per lo sviluppo non lineare, basati su ramificazioni e merge. Per garantire l'integrità della cronologia e la resistenza alle modifiche retroattive, viene utilizzato l'hashing implicito di tutta la cronologia precedente in ogni commit, e è inoltre possibile autenticare con firme digitali i tag e i commit di singoli sviluppatori.
Rispetto alla versione precedente, nella nuova versione sono state accettate 464 modifiche, realizzate con la partecipazione di 80 sviluppatori, 17 dei quali hanno partecipato per la prima volta allo sviluppo. Le principali novità sono:
- Nel comando "git repack" sono state aggiunte le opzioni "--filter" e "--filter-to", che consentono di ripacchettare il repository tenendo conto di un determinato filtro di oggetti, e, se necessario, di spostare in un luogo separato gli oggetti che non soddisfano il filtro specificato. Le opzioni possono essere utilizzate per suddividere il repository in base a criteri specifici (ad esempio, per rimuovere oggetti non necessari o troppo grandi), mantenendo comunque la possibilità di accedere a tutte le parti tramite il cloning parziale. Ad esempio, per mantenere nel repository i blob di dimensioni inferiori a 1 MB e spostare in un repository separato gli altri oggetti di grandi dimensioni, si può eseguire: $ git init --bare ../backup.git $ git repack -ad --filter='blob:limit=1m' \ --filter-to=../backup.git/objects/pack/pack
L'inizializzazione del repository mediante il cloning parziale consente di lavorare con una copia incompleta del repository, gestendo correttamente le richieste per oggetti assenti (quando si richiedono oggetti assenti, questi verranno caricati on-the-fly secondo necessità).
- È stata aggiunta la possibilità di lavorare con più file pack contenenti informazioni sugli oggetti irraggiungibili («cruft packs»), ai quali nel repository non esistono riferimenti (non referenziati da rami o tag). Grazie alla nuova opzione «git repack —max-cruft-size» è possibile definire la dimensione massima di un singolo file pack e ottenere la suddivisione della base degli oggetti irraggiungibili in una serie di file pack di dimensioni ridotte. L'utilizzo di più file pack piccoli invece di uno grande consente di ridurre significativamente le operazioni di I/O durante la riesecuzione dei repository con un numero elevato di oggetti irraggiungibili, poiché per ogni operazione di riesecuzione non sarà necessario riscrivere tutti i dati.
- È stato aggiunto il riconoscimento dei tentativi di eseguire un doppio annullamento di commit tramite «git revert» e considerare questo fatto nella formazione del messaggio di annullamento (in caso di secondo «git revert» invece di «Revert: Revert: fix bug» sarà registrato «Reapply fix bug», e se si annulla la modifica per la terza volta sarà «Revert Reapply fix bug»). $ git revert —no-edit HEAD >/dev/null $ git revert —no-edit HEAD >/dev/null $ git log —oneline a300922 (HEAD -> main) Reapply «fix bug» 0050730 Revert «fix bug» b290810 fix bug
- È consentito l'uso congiunto delle opzioni «—rfc» e «—subject-prefix». Ad esempio, per generare una email con il prefisso «[RFC PATCH bpf-next]» nell'oggetto del messaggio si può specificare: $ git format-patch —subject-prefix="PATCH bpf-next" —rfc
- Nel comando «git log» è consentito specificare il segnaposto «%(decorate)» per mostrare i nomi dei rami correlati quando si determina il formato utilizzando l'opzione «—format», ad esempio: $ git log —format='%cr%(decorate) (%h) %s' 3 giorni fa (HEAD -> master, origin/master, origin/HEAD) (e0939bec27) RelNotes: correzioni minori di wording nelle note di rilascio 2.43.0 7 giorni fa (tag: v2.43.0-rc1) (dadef801b3) Git 2.43-rc1 7 giorni fa (8ed4eb7538) Unisci il ramo ‘tb/rev-list-unpacked-fix’
- In «git for-each-ref» e comandi simili è stata aggiunta la possibilità di applicare le regole .mailmap ai formati specificati tramite l'opzione «—format», come «%(authorname)» e «%(committeremail)».
Fonte: opennet.ru
