Rilascio del sistema di controllo delle versioni Git 2.52

Dopo tre mesi di sviluppo, è stata presentata la versione del sistema di gestione distribuita dei codici sorgenti Git 2.52. Git è caratterizzato da un'alta prestazione e offre strumenti per lo sviluppo non lineare, basati su ramificazioni e fusioni 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, insieme alla convalida attraverso firme digitali degli sviluppatori su singoli tag e commit. Il codice di Git è distribuito sotto la licenza GPLv2+.

Rispetto alla versione precedente, nella nuova release sono stati inclusi 637 cambiamenti, realizzati con la partecipazione di 94 sviluppatori (33 hanno partecipato per la prima volta allo sviluppo di Git). Le novità principali (1, 2, 3):

  • È stato aggiunto il comando «git last-modified» per mostrare l'elenco dei file in una revisione specificata e i commit attraverso i quali sono state apportate le ultime modifiche a ciascuno di questi file. $ git last-modified HEAD b56f6dcd7b4c90192018e848d0810f091d092913 test.h 29330ae4b820147c98e723399e9438c8bee60a8a test1.c 573ad8917beb99dc643b6e7f5c117a294384a575 test2.c
  • È stato aggiunto il comando «git repo» per eseguire operazioni relative all'estrazione di informazioni dal repository. Sono state proposte due sotto-comandi: «git repo info» e «git repo structure», che forniscono informazioni sulle impostazioni del repository e dettagli sulla sua struttura (ad esempio, è possibile scoprire il numero di riferimenti e oggetti nel repository). $ git repo info object.format references.format object.format=sha1 references.format=reftable $ git repo structure | Struttura del repository | Valore | | ——————— | —— | | * Riferimenti | | | * Conto | 1983 | | * Rami | 4 | | * Tag | 1125 | | * Remoti | 854 | | * Altri | 0 | | | | | * Oggetti raggiungibili | | | * Conto | 518955 | | * Commit | 77469 | | * Alberi | 188865 | | * Blob | 251631 | | * Tag | 990 |
  • Sono state aggiunte tre sotto-comandi al comando «git refs» che unificano operazioni a basso livello disparate e sovrapposte sui riferimenti (git for-each-ref, git show-ref, git update-ref e git pack-refs):
    • «git refs optimize» — ottimizzazione del backend di archiviazione dei riferimenti (simile a «git pack-refs»).
    • «git refs list» — restituisce un elenco di tutti i riferimenti (simile a «git for-each-ref» o «git show-ref»).
    • «git refs exists» — verifica l'esistenza di un riferimento (simile a «git show-ref —exists»).
  • Il formato per l'esportazione o l'importazione della cronologia dei commit è stato esteso con la possibilità di lavorare con firme crittografiche, utilizzando sia identificatori di oggetti basati sull'algoritmo SHA-1 che su SHA-256. Nel comando "git fast-import" è stata implementata la supporto per la gestione dei tag firmati analogamente ai commit firmati. Sono state aggiunte le opzioni "—signed-commits=<modalità>" e "—signed-tags=<modalità>" per controllare la gestione dei commit firmati e dei tag durante l'importazione (la modalità può assumere i valori verbatim, warn-verbatim, warn-stri, strip o abort).
  • Nel comando "git maintenance" è stata aggiunta la supporto per la nuova strategia "geometric" ("git config set maintenance.strategy geometric"), che consente di ridurre il tempo di manutenzione di grandi monorepository. Rispetto alla strategia precedente, che utilizzava una logica simile al comando "git gc", la nuova strategia evita di ri-pacchettizzare tutti gli oggetti ed esclude operazioni eccessivamente dispendiose in termini di risorse, come la fusione di tutti i file pack (l'unione viene effettuata, se possibile, a pezzi e senza la pulizia degli oggetti eliminati).
  • È stato aggiunto il comando «git sparse-checkout clean» per semplificare il ripristino dello stato della directory di lavoro, rimuovendo i file che non corrispondono alla nuova definizione di sparse-checkout, i quali non dovrebbero essere presenti nella copia locale secondo le attuali impostazioni di sparse-checkout.
  • Per semplificare la codebase e facilitare la manutenzione, è stata eseguita una rifattorizzazione per ridurre l'uso della variabile globale the_repository.
  • È stato ampliato l'uso dei filtri di Bloom, una struttura probabilistica per il controllo dell'appartenenza a un insieme, che consente falsi positivi ma esclude la dimenticanza di elementi esistenti. I filtri di Bloom vengono ora utilizzati per accelerare la ricerca nella cronologia delle modifiche quando si specificano maschere nei percorsi dei file, ad esempio, «foo/bar/*/baz».
  • Le prestazioni del comando «git describe» sono state migliorate del 30% grazie all'uso di code di priorità. Le operazioni di rinominazione dei riferimenti in «git remote rename» sono state accelerate. L'uso degli indici in «git ls-files» è stato ampliato. È stata notevolmente accelerata l'operazione del comando «git log -L», grazie all'esclusione di confronti a tre livelli non necessari durante l'elaborazione dei merge dei commit. Sono state implementate ottimizzazioni nella libreria xdiff.
  • È stata fornita un'opzione per l'uso di implementazioni in Rust di alcune funzioni interne, come la codifica e la decodifica di valori interi a lunghezza variabile. Per impostazione predefinita, il codice Rust non è utilizzato e la sua attivazione richiede l'impostazione del flag di compilazione WITH_RUST. In futuro, si prevede di riscrivere componenti interni significativi di Git in Rust e di rendere Rust una delle dipendenze di compilazione obbligatorie in Git 3.0.
  • È stato aggiornato l'elenco delle modifiche che compromettono la compatibilità e che saranno applicate nel ramo Git 3.0. In Git 3.0 è stato deciso di modificare l'impostazione init.defaultBranch predefinita in "main", quindi nei repository creati con il comando "git init", il ramo predefinito sarà denominato "main" invece di "master". Si segnala inoltre il passaggio predefinito agli identificatori degli oggetti basati sulla funzione di hash SHA-256 durante l'inizializzazione di nuovi repository. Per semplificare la portabilità tra repository con identificatori di oggetti basati su hash SHA-1 e SHA-256, è stata fornita la possibilità di eseguire operazioni di push e pull da un repository con un algoritmo di hash a un altro che utilizza un algoritmo di hash diverso.

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