Git 2.55

Presentato rilascio del sistema di gestione distribuita dei testi sorgente Git 2.55. Tra le principali modifiche: inclusione predefinita della build con Rust, implementazione per Linux del processo fsmonitor, nuova strategia di reimballaggio dell'indice MIDX incrementale, comando git history fixup per correggere il commit, ottimizzazione della generazione delle bitmap di accessibilità degli oggetti, supporto per l'esecuzione parallela degli hook, comando git format-rev. Codice Git distribuito sotto licenza GPLv2+.

Rispetto alla versione precedente, nella nuova versione sono state adottate 505 modifiche, preparate con la partecipazione di 100 sviluppatori, 33 dei quali hanno collaborato per la prima volta allo sviluppo di Git.

Novità principali (github.blog, gitlab.com/blog, gitlab.com/git-scm):

  • Di default è inclusa supporto per componenti in linguaggio Rust. Il compilatore rustc è stato aggiunto è incluso tra le dipendenze di build. Per una build senza Rust si può usare il flag NO_RUST=1 quando si esegue l'utilità make o -Drust=disabled durante la configurazione di meson. La possibilità di disabilitare la build con Rust sarà supportata fino alla branch Git 3.0, in cui Rust sarà incluso è tra le dipendenze obbligatorie. È stata implementata, nel linguaggio Rust, un'interfaccia per la portabilità tra configurazioni con hash SHA-1 e SHA-256, oltre ad alcune funzioni interne, come la codifica e decodifica di valori interi a lunghezza variabile. In futuro, è prevista una revisione in Rust di componenti interni più significativi di Git.
  • Nel team sperimentale "git history", che offre funzionalità per la riscrittura della cronologia delle modifiche, è stata aggiunta l'operazione «git history fixup» per correggere un commit. L'operazione fixup consente di trasferire le modifiche aggiunte tramite git add a un commit precedente e riscrivere automaticamente tutti i commit successivi come se si stesse eseguendo il comando git commit —fixup=<commit> e avviando git rebase —autosquash <commit>~.
  • Per la piattaforma Linux è stato implementato un processo in background fsmonitor, che monitora le modifiche nel file system utilizzando il meccanismo inotify e consente di evitare la scansione dell'intero 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 per l'aggiornamento dei metadati nell'indice MIDX incrementale (multi-pack index), permettendo di evitare la ricompattazione dell'intero indice. In questo indice multi-pack incrementale, invece di un unico grande indice che contiene informazioni sulla distribuzione degli oggetti tra i file pack, si utilizza una stratificazione — ogni strato copre un certo numero di file pack e viene memorizzato in un file bitmap separato. Questa struttura consente di aggiungere dati sugli oggetti in nuovi file pack all'indice, allegando nuovi strati senza ricostruire quelli esistenti. Il comando git repack —write-midx=incremental consente di aggiungere un nuovo strato all'indice MIDX incrementale, coprendo i file pack recentemente creati. In combinazione con la modalità di imballaggio dei repository —geometric, il nuovo comando offre la possibilità di unire nuovi oggetti da più file pack in un unico 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 i grandi strati più vecchi, e di escludere l'incontrollato ampliamento 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 significativamente ottimizzata grazie a un nuovo algoritmo di attraversamento dell'albero degli oggetti, che esclude la ricorsione superflua, il caching delle posizioni degli oggetti, l'ordinamento delle bitmap prima della loro fusione tramite operazione XOR e la rielaborazione del codice per la creazione di bitmap pseudo-fusionate (pseudo-merge). Nel 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 esecuzione parallela delle indipendenti hook nei file di configurazione. I hook che influenzano o considerano lo stato condiviso, ad esempio quelli che modificano i messaggi di commit o ispezionano gli indici e l'albero di lavoro, non possono essere eseguiti in parallelo. Tuttavia, è possibile eseguire in parallelo i hook per il controllo tramite linter e l'esecuzione dei test unitari. I hook che consentono l'esecuzione parallela possono essere configurati tramite il parametro hook.nome_huok.parallel = true. Il numero di lavori eseguiti simultaneamente è definito tramite la configurazione hook.jobs, hook.<event>.jobs o l'opzione della 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:. Nei test condotti, l’esclusione dei blob durante l’esecuzione di —path-walk ha permesso di ridurre le dimensioni del file pack generato del 16%.
  • Aggiunto il comando git format-rev per formattare le revisioni e i nomi degli oggetti, citati nelle liste dei commit o presenti in testo arbitrario (ad esempio, può essere usato negli hook per elaborare le note sui commit).

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

Junio C Hamano builtin/commit.c

  • È attivato per impostazione predefinita l'escaping della maggior parte delle sequenze di controllo del terminale nei messaggi informativi e nel testo degli errori inviati dal server. Quando si interagisce con un server malevolo, tali sequenze escape potrebbero essere utilizzate per nascondere o modificare l'output, ad esempio mediante sequenze escape per spostare il cursore e cancellare il testo. È stata mantenuta la compatibilità con le sequenze escape per l’evidenziazione degli elementi in colore.
  • Il comando git checkout -m ora salva automaticamente le modifiche locali in conflitto nell'area 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 unico comando. Ad esempio, per trasferire il ramo main non solo al server principale, ma anche ai mirror, è possibile creare un gruppo publish dai server github, gitlab e mirror:

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

  • Nel comando git log —graph è stata aggiunta l'opzione —graph-lane-limit=<N> per limitare il numero di linee verticali nella visualizzazione dei rami, lasciando spazio sullo schermo per i dati sui commit nei repository con un gran numero di rami.


* | | | | 619931f561 Merge branch 'dl/posix-unused-warning-clang'
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: semplificare il confronto di GIT_GNUC_PREREQ()
| * | | | ~ ffd45926dc compat/posix.h: pulire GIT_GNUC_PREREQ() e UNUSED
|\ \ \ \ \~
| * | | | ~ 3f5203eeb4 ls-files: filtrare pathspec prima di lstat

  • Nei comandi git log e git rev-list è stata aggiunta l'opzione —max-count-oldest=<N>, che consente di selezionare i N commit più vecchi nel range.

Fonte: linux.org.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