Pubblicazione del sistema di gestione del codice sorgente Git 2.35

Dopo due mesi di sviluppo, è stata pubblicata la versione 2.35 del sistema di gestione distribuita dei codici sorgente Git. Git è uno dei sistemi di controllo versioni più popolari, affidabili e ad alte prestazioni, che fornisce strumenti flessibili per lo sviluppo non lineare, basati su branch e merge. Per garantire l'integrità della storia e la resistenza alle modifiche retroattive, viene utilizzato un hashing implicito dell'intera storia precedente in ogni commit; è inoltre possibile certificare digitalmente i tag e i commit da parte degli sviluppatori.

Rispetto alla versione precedente, nella nuova versione sono stati integrati 494 cambiamenti, preparati con la partecipazione di 93 sviluppatori, 35 dei quali hanno partecipato per la prima volta allo sviluppo. Le principali novità includono:

  • Aumentate le possibilità di utilizzo delle chiavi SSH per certificare gli oggetti Git con una firma digitale. Per differenziare il periodo di validità di più chiavi, è stata introdotta la compatibilità con le direttive OpenSSH 'valid-before' e 'valid-after', che consentono di gestire correttamente le firme dopo la rotazione di una delle chiavi utilizzate da uno degli sviluppatori. In precedenza, si presentava un problema nel separare le firme firmate con la vecchia e la nuova chiave: se si eliminava la chiave vecchia, si poteva perdere la possibilità di verificare le firme create con essa, mentre se si manteneva, si sarebbe potuta creare nuove firme con la chiave vecchia, già sostituita da un'altra chiave. Grazie a 'valid-before' e 'valid-after', è possibile delimitare il campo di applicazione delle chiavi in base al momento della creazione della firma.
  • Nella configurazione merge.conflictStyle, che consente di scegliere il modo di presentare le informazioni sui conflitti durante il merge, è stata introdotta la modalità 'zdiff3', che sposta al di fuori dell'area di conflitto tutte le righe tipiche indicate all'inizio o alla fine del conflitto, permettendo così di ottenere una rappresentazione più compatta delle informazioni.
  • Nel comando «git stash» è stata aggiunta la modalità «—staged», che consente di nascondere solo le modifiche aggiunte all'indice, per esempio in situazioni in cui è necessario posticipare temporaneamente parte delle modifiche complesse per aggiungere per prima cosa ciò che è già pronto, e occuparsi del resto in un secondo momento. La modalità ricorda il comando «git commit», che registra solo le modifiche inserite nell'indice, ma invece di creare un nuovo commit in «git stash —staged», il risultato viene salvato nell'area temporanea stash. Una volta necessarie, le modifiche possono essere recuperate con il comando «git stash pop».
  • Nel comando «git log» è stato aggiunto un nuovo specificatore di formato «—format=%(describe)», che permette di combinare l'output di «git log» con il risultato dell'esecuzione del comando «git describe». I parametri per «git describe» sono specificati direttamente all'interno dello specificatore («—format=%(describe:match=,exclude=)»), dove è possibile includere anche tag abbreviati («—format=%(describe:tags=)») e configurare il numero di caratteri esadecimali per l'identificazione degli oggetti («—format=%(describe:abbrev=)»). Ad esempio, per visualizzare gli ultimi 8 commit, i cui tag non hanno etichetta di rilascio, e per specificare identificatori di 8 caratteri, è possibile utilizzare il comando: $ git log -8 —format='%(describe:exclude=*-rc*,abbrev=13)' v2.34.1-646-gaf4e5f569bc89 v2.34.1-644-g0330edb239c24 v2.33.1-641-g15f002812f858 v2.34.1-643-g2b95d94b056ab v2.34.1-642-gb56bd95bbc8f7 v2.34.1-203-gffb9f2980902d v2.34.1-640-gdf3c41adeb212 v2.34.1-639-g36b65715a4132
  • Nella configurazione user.signingKey è stata implementata il supporto per nuovi tipi di chiavi, che non si limitano al tipo «ssh-» e alla specifica del percorso completo del file chiave. I tipi alternativi sono specificati utilizzando il prefisso «key::», per esempio, «key::ecdsa-sha2-nistp256» per le chiavi ECDSA.
  • È stata notevolmente aumentata la velocità di generazione dell'elenco delle modifiche in modalità «—histogram», così come nell'uso dell'opzione «—color-moved-ws», che gestisce l'evidenziazione degli spazi nel diff colorato.
  • Nel comando «git jump», utilizzato per fornire a Vim informazioni sui passaggi esatti verso la posizione richiesta nel file durante la risoluzione dei conflitti di merge, la revisione delle differenze o l'esecuzione di un'operazione di ricerca, è stata fornita la possibilità di restringere i conflitti di merge considerati. Ad esempio, per limitare le operazioni solo alla cartella «foo» si può specificare «git jump merge — foo», e per escludere il trattamento della cartella «Documentation» — «git jump merge — ':^Documentation'».
  • È stato effettuato un lavoro di standardizzazione dell'uso del tipo «size_t» al posto di «unsigned long» per i valori che rappresentano la dimensione degli oggetti, il che ha consentito di applicare i filtri «clean» e «smudge» a file di dimensioni superiori a 4 GB su tutte le piattaforme, comprese quelle con il modello di dati LLP64, dove il tipo «unsigned long» è limitato a 4 byte.
  • Nel comando «git am» è stata aggiunta l'opzione «—empty=(stop|drop|keep)», che consente di scegliere il comportamento per le email vuote, che non contengono patch, durante l'analisi delle patch dalla casella di posta. Il valore «stop» terminerà l'intera operazione di applicazione delle patch, «drop» ignorerà la patch vuota, «keep» creerà un commit vuoto.
  • Nei comandi «git reset», «git diff», «git blame», «git fetch», «git pull» e «git ls-files» è stato aggiunto il supporto per indici parziali (sparse index), che migliorano le prestazioni e risparmiano spazio nei repository in cui vengono eseguite operazioni di clonazione parziale (sparse-checkout).
  • Il comando «git sparse-checkout init» è stato dichiarato obsoleto, e al suo posto si deve usare «git sparse-checkout set».
  • È stata aggiunta un'implementazione iniziale di un nuovo backend «reftable» per la memorizzazione di riferimenti, come rami e tag, nel repository. Il nuovo backend utilizza un'archiviazione a blocchi, applicata dal progetto JGit, ed è ottimizzato per memorizzare un numero molto elevato di riferimenti. Il backend non è ancora integrato nel sistema di riferimenti (refs) ed è pronto per un uso pratico.
  • La palette di colori del comando «git grep» è stata allineata con l'utilità GNU grep.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster