Dopo due mesi di sviluppo, è stata pubblicata la versione 2.45 del sistema di controllo di versione distribuito Git. Git è uno dei sistemi di controllo di versione più popolari, affidabili e ad alte prestazioni, fornendo strumenti flessibili per lo sviluppo non lineare basati su ramificazioni e fusioni. 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 la verifica tramite firme digitali degli sviluppatori per singoli tag e commit. Il codice di Git è distribuito con licenza GPLv2+.
Rispetto alla versione precedente, il nuovo rilascio include 540 modifiche, preparate con la partecipazione di 96 sviluppatori, di cui 35 hanno partecipato per la prima volta allo sviluppo. Le principali novità sono:
- Aggiunta la supporto preliminare per il backend 'reftable' per l'archiviazione efficace dei riferimenti a branch e tag nel repository. Il nuovo backend utilizza uno storage a blocchi, impiegato dal progetto JGit ed ottimizzato per conservare un numero molto elevato di riferimenti (i formati tradizionali di archiviazione dei riferimenti comportano significativi oneri nei repository con un alto numero di riferimenti a causa della creazione di un numero estremamente elevato di file in una sola directory nel caso in cui i riferimenti siano memorizzati nella directory $GIT_DIR/refs o della necessità di riscrivere un grande file ogni volta in caso di memorizzazione dei riferimenti nel file $GIT_DIR/packed_refs). Il nuovo backend è attivato specificando l'opzione '--ref-format=reftable' durante l'inizializzazione del repository ('git init --ref-format=reftable /path/to/repo') e consente di accelerare la ricerca, la lettura e la scrittura nei repository con un numero elevato di riferimenti.
- Forniti strumenti per garantire la portabilità tra gli identificatori degli oggetti basati su hash SHA-1 e SHA-256. Per garantire l'operatività con gli hash SHA-1 e SHA-256 in un unico repository durante la migrazione graduale agli hash SHA-256, è stato proposto un nuovo formato di oggetti 'compatibility', che consente di fare riferimento agli oggetti non solo tramite l'hash principale, definito al momento dell'inizializzazione del repository, ma anche tramite un hash di riserva. Ad esempio, durante l'inizializzazione del repository, è possibile scegliere il formato SHA-256 e definire l'hash SHA-1 come riserva: git init --object-format=sha256 /path/to/repo cd /path/to/repo git config extensions.compatObjectFormat sha1
- Nel comando «git rev-list» è stata aggiunta la possibilità di visualizzare gli identificatori degli oggetti non presenti nel repository locale, anche se non sono accessibili nel ramo o nel tag, il che può essere utilizzato per diagnosticare danni nel repository: git rev-list —missing=print —all | grep ‘^?’ ?70678e7afeacdcba1242793c3d3d28916a2fd152
- È stato aggiunto un nuovo comando «git reflog list» per mostrare i reflog noti e i corrispondenti riferimenti a tag e rami.
- È stata fornita la possibilità di definire prefissi alternativi per l'output di «git diff», visualizzati prima del percorso del file e che indicano lo stato prima e dopo una determinata versione del file (di default vengono utilizzati i prefissi «a/» e «b/»). Per specificare i propri prefissi, sono stati aggiunti nuovi parametri diff.srcPrefix e diff.dstPrefix alla configurazione.
- È stato aggiunto il parametro core.commentString per definire la stringa separatrice, che verrà utilizzata al posto del simbolo «#» per ignorare i commenti nei messaggi di commit. La precedente impostazione core.commentChar è stata adattata per supportare simboli multibyte come separatore dei commenti (in precedenza erano supportati solo i simboli ASCII).
- Nel comando «git config» è stata aggiunta l'opzione «—comment», che consente di salvare commenti nel file .gitconfig per spiegare il significato delle varie impostazioni. git config —comment ‘to show the merge base’ merge.conflictStyle diff3 tail -n 2 .git/config [merge] conflictStyle = diff3 # to show the merge base
- Nel comando «git cherry-pick» è stata aggiunta l'opzione «—empty» per rimuovere automaticamente i commit ridondanti, in analogia con l'opzione «—empty» in git-rebase e git-am.
- Nel comando «git checkout -p» è consentito utilizzare il simbolo «@» come sinonimo del nome «HEAD».
Fonte: opennet.ru
