Dopo due mesi di sviluppo, è stata pubblicata la versione 2.45 del sistema di controllo versione distribuito Git. 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 ramificazione e fusione di rami. Per garantire l'integrità della storia e la resilienza alle modifiche retroattive, viene utilizzata l'hashing implicito dell'intera storia precedente in ogni commit, ed è possibile anche la verifica tramite firme digitali degli sviluppatori su singoli tag e commit. Il codice di Git è distribuito sotto licenza GPLv2+.
Rispetto alla precedente versione, questo aggiornamento include 540 modifiche, realizzate con la partecipazione di 96 sviluppatori, di cui 35 hanno partecipato per la prima volta allo sviluppo. Le principali novità sono:
- È stato aggiunto il supporto preliminare per il backend "reftable" per una memorizzazione efficiente dei riferimenti a rami e tag nel repository. Il nuovo backend utilizza uno storage a blocchi, impiegato dal progetto JGit, ed è ottimizzato per memorizzare un numero molto elevato di riferimenti (i formati tradizionali per la memorizzazione dei riferimenti comportano significativi overhead nei repository con un gran numero di riferimenti a causa della necessità di gestire un numero molto elevato di file in una sola directory, se i riferimenti vengono memorizzati nella directory $GIT_DIR/refs, o dell'esigenza di riscrivere un grande file ad ogni aggiornamento, se sono memorizzati nel file $GIT_DIR/packed_refs). Il nuovo backend si attiva 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 gran numero di riferimenti.
- Sono stati forniti strumenti per garantire la portabilità tra gli identificatori di oggetti basati su hash SHA-1 e SHA-256. Per lavorare con hash SHA-1 e SHA-256 in uno stesso repository durante la migrazione graduale verso gli hash SHA-256, è stato proposto un nuovo formato di oggetti "compatibility", che consente di riferirsi agli oggetti non solo tramite l'hash principale, specificato al momento dell'inizializzazione del repository, ma anche attraverso un hash secondario. Ad esempio, durante l'inizializzazione del repository, è possibile scegliere il formato SHA-256 e definire come secondario l'hash SHA-1: 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 accessibili tramite rami o tag, che può essere utilizzata per diagnosticare la corruzione del repository: git rev-list --missing=print --all | grep '^?' ?70678e7afeacdcba1242793c3d3d28916a2fd152.
- È stata aggiunta una nuova comando "git reflog list" per mostrare i reflog noti e i relativi riferimenti ai tag e ai rami.
- È stata introdotta 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 (per impostazione predefinita, vengono utilizzati i prefissi "a/" e "b/"). Per definire prefissi personalizzati, sono stati aggiunti i nuovi parametri diff.srcPrefix e diff.dstPrefix nella configurazione.
- È stato aggiunto il parametro core.commentString per definire la stringa di separazione, che sarà utilizzata al posto del simbolo "#" per ignorare i commenti nei messaggi di commit. La precedente impostazione core.commentChar è stata adattata per supportare caratteri multi-byte come separatore di commento (in precedenza erano supportati solo caratteri ASCII).
- Nel comando "git config" è stata aggiunta l'opzione "--comment", che consente di salvare i commenti nel file .gitconfig per spiegare il significato di determinate 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, analogamente all'opzione "--empty" in git-rebase e git-am.
- Nel comando "git checkout -p" è stato consentito l'uso del simbolo "@" come sinonimo del nome "HEAD".
Fonte: opennet.ru
