rilascio del sistema di controllo distribuito delle versioni . Git è uno dei sistemi di controllo delle versioni più popolari, affidabili e ad alte prestazioni, che offre strumenti flessibili per lo sviluppo non lineare, basati su ramificazioni e fusioni. Per garantire l'integrità della cronologia e resistere a modifiche retroattive, viene utilizzato l'hashing implicito dell'intera cronologia precedente in ogni commit, oltre alla possibilità di autentificazione con firme digitali da parte degli sviluppatori per singoli tag e commit.
Rispetto all'ultima versione, nella nuova release sono stati introdotti 544 cambiamenti, realizzati con la partecipazione di 78 sviluppatori, di cui 21 hanno contribuito per la prima volta. :
- È stata aggiunta la supporto per i macro di configurazione, che permettono di passare rapidamente tra diverse impostazioni senza entrare nei dettagli delle opzioni collegate. Utilizzando i macro, non è necessario ricordare quali impostazioni cambiare per attivare certe funzionalità. Ad esempio, in caso di rallentamenti con grandi repository, potrebbe essere necessario passare a un nuovo meccanismo di indicizzazione, abilitare la compressione dei prefissi dei percorsi e attivare la cache dei file non tracciati, impostando il parametro index.version su 4 e attivando core.untrackedCache. I macro consentono di risparmiare tempo nella ricerca delle soluzioni nella documentazione e di attivare immediatamente le impostazioni ottimizzate per repository con un gran numero di file:
git config feature.manyFiles true
- Di default è attivata la memorizzazione degli oggetti in forma di grafo dei commit (commit-graph), in cui si utilizza una struttura a grafo anziché una lista lineare di hash degli oggetti con riferimenti ad altri oggetti per l'indicizzazione. Mentre in precedenza era necessario caricare ogni oggetto dal disco per cercare riferimenti per determinare le versioni contenenti una determinata correzione, con la memorizzazione a grafo è possibile definire immediatamente tutte le relazioni necessarie. La transizione alla memorizzazione a grafo dei commit nei repository del kernel Linux e di Git ha consentito quasi un raddoppio delle prestazioni nelle operazioni con i rami. Per attivare il nuovo metodo di memorizzazione dopo l'aggiornamento a Git 2.24, è necessario eseguire il comando "git gc".
Tra le modifiche relative a commit-graph, si nota anche l'uniformità dell'aspetto del indicatore di progresso delle operazioni nelle comandi associati a commit-graph (come «git commit-graph write», «git commit-graph verify», ecc.). Ora l'indicatore di progresso viene visualizzato di default solo per il terminale (per modificare il comportamento, utilizzare l'opzione «-[no-]progress»). Inoltre, è stato aggiunto un nuovo parametro di configurazione fetch.writeCommitGraph, che include l'aggiornamento automatico del file del grafico dei commit durante le operazioni «git fetch» (tutti i commit estratti da repository esterni andranno direttamente nel commit-graph senza necessità di eseguire separatamente auto-gc);
- Aggiunta un comando per riscrivere la cronologia delle modifiche — «», che è una alternativa più semplice al comando «» per eseguire operazioni sulla cronologia delle modifiche nel repository (ad esempio, la rimozione di un file dal repository o il recupero della cronologia delle modifiche di una determinata directory). Per migliorare l'efficienza, invece di eseguire un'analisi ordinata per commit, in «git filter-repo» le operazioni vengono eseguite su una rappresentazione della cronologia sotto forma di flusso continuo.
La filtrazione della cronologia avviene tramite l'opzione «-path-{glob,regex}», che consente di utilizzare sia maschere semplici che espressioni regolari. Sono disponibili anche opzioni per eseguire operazioni di «cerca e sostituisci» o per pulire oggetti binari che superano una dimensione specificata. Ogni commit riscritto riceve un nuovo identificatore hash SHA-1 e tutte le referenze al commit sostituito vengono aggiornate in base al nuovo identificatore.
Per generare un riepilogo delle statistiche del repository (numero di oggetti per tipo, i file e le directory più grandi, quali estensioni richiedono più spazio su disco, ecc.) è prevista l'opzione "-analyze". Per ampliare la funzionalità, è possibile collegare gestori di callback personalizzati in linguaggio Python, tramite i quali si possono sia creare nuovi sottocomandi, sia gestire vari eventi (ad esempio, nuovi tipi di file);
- È stata aggiunta l'opzione "—end-of-options", che consente di separare le opzioni dai nomi dei riferimenti, che potrebbero iniziare con il simbolo "-" e quindi essere interpretati come opzioni ("git log —end-of-options —super-dangerous-option"). Se nella pratica è possibile sfuggire a nomi simili come "git log ‘refs/heads/—super-dangerous-option'", negli script potrebbero sorgere problemi nella definizione dello spazio dei nomi. Il separatore comunemente usato "—" in questo caso non è applicabile, poiché è già utilizzato per separare i nomi dei riferimenti dai file (ad esempio, "git log —end-of-options —super-dangerous-option ^master — path/to/file");
- In "git rebase —rebase-merges" sono state aggiunte le opzioni "—strategy" e "—strategy-option" per la scelta ;
- Aggiunto un nuovo gestore «.git/hooks/pre-merge-commit», chiamato dopo l'esecuzione di un'unione, ma prima della registrazione del commit risultante;
- Nel motore di completamento automatico dei comandi è stata aggiunta la supporto per completare le variabili di configurazione in base alle impostazioni di comandi specifici.
Ad esempio, se è necessario digitare «git -c core.autocrlf=false add path/to/my/file», ma non si ricorda il nome esatto della variabile «core.autocrlf», si può premere Tab e ricevere un suggerimento.
Inoltre, gli sviluppatori di Git codice di condotta per i partecipanti al progetto, che stabilisce i principi fondamentali per la risoluzione delle situazioni di conflitto. Il documento si basa sulle raccomandazioni di ««, utilizzati in molti progetti open source, tra cui il kernel Linux, Eclipse, Freedesktop, GitLab, Ruby e Kubernetes. Il documento definisce pari opportunità per tutti i partecipanti, indipendentemente dalle loro convinzioni, età, genere, preferenze religiose, livello di istruzione, stato sociale e nazionalità. La comunità incoraggia una comunicazione amichevole, comprensione, empatia per i problemi degli altri partecipanti, accettazione delle critiche costruttive e adozione delle migliori soluzioni per l'intera comunità. Non sono tollerati troll, comunicazioni offensive, tentativi di umiliazione, molestie, violazioni della privacy, divulgazione di informazioni personali e altre azioni che possono essere considerate inopportune in una comunicazione professionale.
Fonte: opennet.ru
