Rilascio di Git 2.55 con supporto Rust abilitato di default

È stato rilasciato il sistema distribuito di gestione dei testi sorgente Git 2.55. Tra le principali novità: abilitazione per impostazione predefinita della compilazione con Rust, implementazione del processo fsmonitor per Linux, nuova strategia di ri-imballaggio dell'indice MIDX incrementale, il comando «git history fixup» per la correzione di commit, ottimizzazione della generazione delle bitmap di disponibilità degli oggetti, supporto per l'esecuzione parallela degli hook, comando «git format-rev». Il codice di Git è distribuito sotto la licenza GPLv2+.

Rispetto all'ultima versione, nella nuova versione sono state incluse 505 modifiche, preparate con la partecipazione di 100 sviluppatori, 33 dei quali hanno partecipato per la prima volta allo sviluppo di Git. Le principali novità (1, 2, 3):

  • Il supporto per i componenti in linguaggio Rust è attivato per impostazione predefinita. Il compilatore rustc
    è stato aggiunto tra le dipendenze di compilazione. Per compilare senza Rust, si può utilizzare il flag «NO_RUST=1» durante l'esecuzione dello strumento make o «-Drust=disabled» durante «meson configure». La possibilità di disabilitare la compilazione con Rust sarà supportata fino alla versione Git 3.0, in cui Rust sarà incluso tra le dipendenze obbligatorie. In Rust è stata implementata un'interfaccia per la portabilità tra configurazioni con hash SHA-1 e SHA-256, così come alcune funzioni interne, come la codifica e decodifica di valori interi di lunghezza variabile. In futuro si prevede una revisione in Rust di componenti interni di maggiore rilevanza di Git.
  • Nel comando sperimentale «git history», che fornisce funzionalità per la riscrittura della cronologia delle modifiche, è stata aggiunta l'operazione «git history fixup» per la correzione di commit. L'operazione «fixup» consente di spostare le modifiche aggiunte tramite «git add» in un commit precedente e riscrivere automaticamente tutti i commit successivi, analogamente all'esecuzione del comando «git commit —fixup=» e avviando «git rebase —autosquash ~».
  • Per la piattaforma Linux è stato implementato un processo in background fsmonitor, che monitora le modifiche nel filesystem utilizzando il meccanismo inotify e consente di evitare la scansione di tutto il catalogo di lavoro durante l'esecuzione di comandi come «git status». L'attivazione avviene tramite la configurazione «core.fsmonitor».
  • Il comando «git repack» ha introdotto la modalità «—write-midx=incremental», che implementa una nuova strategia di aggiornamento dei metadati nell'indice MIDX incrementale (multi-pack index), consentendo di evitare la ricompattazione dell'intero indice. Nell'indice multi-pack incrementale, invece di un unico grande indice contenente informazioni sulla distribuzione degli oggetti nei file pack, viene utilizzata una suddivisione in strati: ogni strato copre un certo numero di file pack e viene memorizzato in un file bitmap separato. Questa struttura consente di aggiungere all'indice dati sugli oggetti in nuovi file pack, attaccando nuovi strati all'indice senza ricostruire gli strati già esistenti.

    Il comando «git repack —write-midx=incremental» permette di aggiungere un nuovo strato all'indice MIDX incrementale, che copre i file pack creati di recente. In combinazione con la modalità di impacchettamento dei repository «—geometric», il nuovo comando consente di unire nuovi oggetti da più file pack in un file pack più grande e, se necessario, di eseguire l'imballaggio e la fusione di più strati adiacenti dell'indice MIDX incrementale. Questa strategia consente, durante l'esecuzione di «git repack», di riscrivere solo gli strati superiori, lasciando intatti gli strati grandi e antichi, ed evita la crescita incontrollata della catena di strati, mantenendo il numero totale di strati a un livello proporzionale al logaritmo del numero totale di oggetti.

  • La generazione delle bitmap di disponibilità degli oggetti è stata notevolmente ottimizzata grazie a un nuovo algoritmo di attraversamento dell'albero degli oggetti, che elimina la ricorsione superflua, la memorizzazione delle posizioni degli oggetti, la classificazione delle bitmap prima della loro unione tramite operazione XOR e la revisione del codice per la creazione di bitmap di pseudo-fusione (pseudo-merge). In un repository di test, le ottimizzazioni hanno permesso di ridurre il tempo di generazione delle bitmap da 612 a 294 secondi.
  • È stata implementata la possibilità di eseguire parallelamente hook indipendenti nei file di configurazione. Gli hook che influenzano o tengono conto dello stato condiviso, come quelli che modificano le note dei commit o ispezionano indici e directory di lavoro, non possono essere eseguiti in parallelo. Tuttavia, è possibile eseguire parallelamente hook per il controllo tramite linter e per l'esecuzione dei test unitari. Gli hook che consentono l'esecuzione parallela possono essere configurati tramite il parametro "hook.nome_hug.parallel = true". Il numero di lavori eseguiti simultaneamente è determinato tramite le impostazioni hook.jobs, hook..jobs oppure l'opzione da riga di comando "-j".
  • Nel comando "git pack-objects --path-walk" è stata implementata la possibilità di specificare filtri come "blob:none", "blob:limit=", "tree:0", "object:type=", "sparse:" e "combine:". In un test condotto, il filtraggio degli blob durante l'esecuzione di "--path-walk" ha consentito di ridurre la dimensione del file pack generato del 16%.
  • È stato aggiunto il comando "git format-rev" per formattare le revisioni e i nomi degli oggetti menzionati nelle liste di commit o che si trovano in testo arbitrario (ad esempio, può essere utilizzato negli hook per elaborare le note dei commit).

    git last-modified | git format-rev --stdin-mode=text --format=%an

    Junio C Hamano builtin/commit.c

  • Di default, è attivato l'escape della maggior parte delle sequenze di controllo del terminale nei messaggi informativi e nel testo degli errori trasmessi. server. Durante l'accesso a contenuti dannosi, server sequenze di escape simili potrebbero essere state utilizzate per nascondere o modificare l'output, ad esempio, tramite sequenze di escape per spostare il cursore e cancellare il testo. È stata mantenuta la compatibilità con le sequenze di escape per l'evidenziazione di elementi a colori.
  • Il comando "git checkout -m" ora salva automaticamente le modifiche locali in conflitto nell'area di stash senza necessità di risolvere immediatamente il conflitto.
  • Nel comando "git push" è stata aggiunta la possibilità di inviare un ramo a più server Git esterni con un singolo comando. Ad esempio, per inviare il ramo main non solo al server principale, ma anche ai mirror, è possibile creare un gruppo "publish" composto da server "github", "gitlab" e "mirror":

    git config remotes.publish "github gitlab mirror"
    git push publish main

  • È stata aggiunta all comando «git log --graph» l'opzione «--graph-lane-limit=» per limitare il numero di righe verticali nella visualizzazione dei rami, lasciando così spazio sullo schermo per i dati sui commit in repository con un numero elevato di rami.


    * | | | | 619931f561 Unisci il ramo ‘dl/posix-unused-warning-clang’
    |\ \ \ \ \
    | * | | | ~ cf48887610 compat/posix.h: semplifica il confronto GIT_GNUC_PREREQ()
    | * | | | ~ ffd45926dc compat/posix.h: riordina GIT_GNUC_PREREQ() e UNUSED
    |\ \ \ \ \~
    | * | | | ~ 3f5203eeb4 ls-files: filtra pathspec prima di lstat

  • Ai comandi «git log» e «git rev-list» è stata aggiunta l'opzione «--max-count-oldest=», che consente di selezionare i N commit più vecchi nell'intervallo.

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