Git 2.55

Presentato rilascio di un sistema distribuito di gestione dei testi sorgente Git 2.55. Tra i principali cambiamenti: inclusione predefinita della build con Rust, implementazione per Linux del processo fsmonitor, nuova strategia di ripacchettizzazione dell'indice incrementale MIDX, comando git history fixup per correggere un commit, ottimizzazione della generazione delle mappe di disponibilità degli oggetti, supporto per l'esecuzione parallela dei ganci, comando git format-rev. Codice Git è distribuito con licenza GPLv2+.

Rispetto all'ultima versione, nella nuova edizione sono stati inclusi 505 cambiamenti, preparati con la partecipazione di 100 sviluppatori, 33 dei quali hanno partecipato per la prima volta allo sviluppo di Git.

Principali novità (github.blog, gitlab.com/blog, gitlab.com/git-scm):

  • Per impostazione predefinita attivata supporto per i componenti in linguaggio Rust. Il compilatore rustc è stata aggiunta tra le dipendenze di build. Per compilare senza Rust, è possibile utilizzare il flag NO_RUST=1 durante l'esecuzione dello strumento make o -Drust=disabled durante l'esecuzione di meson configure. La possibilità di disabilitare la compilazione con Rust sarà supportata fino al ramo Git 3.0, in cui Rust sarà è attivato tra le dipendenze obbligatorie. In linguaggio 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 la decodifica di valori interi a lunghezza variabile. In futuro è prevista la riscrittura in Rust di componenti interni di Git più significativi.
  • Nel team sperimentale "git history", che fornisce funzionalità per la riscrittura della storia delle modifiche, è stata aggiunta l'operazione «git history fixup» per correggere un commit. L'operazione fixup consente di spostare le modifiche aggiunte tramite git add in un commit precedente e di riscrivere automaticamente tutti i successivi commit, in modo analogo all'esecuzione del comando git commit —fixup=<commit> e lancio di git rebase —autosquash <commit>~.
  • Per la piattaforma Linux è stato implementato un processo in background fsmonitor, che controlla le modifiche nel file system tramite il meccanismo inotify e consente di evitare di scorrere l'intero catalogo di lavoro quando si eseguono 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 in un indice MIDX incrementale (multi-pack index), consentendo di evitare la ripacchettizzazione dell'intero indice. Nell'indice multi-pack incrementale, invece di un grande indice che contiene informazioni sulla distribuzione degli oggetti tra i file pack, viene utilizzata la 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 i dati sugli oggetti in nuovi file pack, allegando nuovi strati all'indice senza dover ricostruire quelli esistenti. Il comando git repack —write-midx=incremental permette di aggiungere un nuovo strato all'indice MIDX incrementale, coprendo i file pack creati di recente. Combinato con la modalità di impacchettamento dei repository —geometric, questo nuovo comando offre la possibilità di unire nuovi oggetti da più file pack in un unico file pack più grande e, se necessario, eseguire la pacchettizzazione e la fusione di diversi strati contigui dell'indice MIDX incrementale. Questa strategia consente, durante l'esecuzione di git repack, di riscrivere solo gli strati superiori, lasciando intatti i vecchi strati più grandi, e consente di evitare una crescita incontrollata della catena di strati, mantenendo il numero totale di strati a un livello proporzionale al log del numero totale di oggetti.
  • È stata notevolmente ottimizzata la generazione delle bitmap di disponibilità degli oggetti grazie a un nuovo algoritmo per l'attraversamento dell'albero degli oggetti, che esclude la ricorsione superflua, memorizza nella cache le posizioni degli oggetti, ordina le bitmap prima della loro unione tramite l'operazione XOR e rielabora il codice per la creazione delle bitmap di pseudo-fusione (pseudo-merge). Nel repository di test, queste ottimizzazioni hanno consentito di ridurre il tempo di generazione delle bitmap da 612 a 294 secondi.
  • È stata implementata la possibilità di eseguire in parallelo operazioni indipendenti hook nei file di configurazione. Non possono essere eseguiti contemporaneamente hook che influenzano lo stato condiviso o lo considerano, ad esempio, che modificano i commenti ai commit o ispezionano indici e alberi di lavoro. Tuttavia, è possibile eseguire contemporaneamente hook per la verifica con il linter e l'esecuzione di unit test. Gli hook che consentono l'esecuzione parallela possono essere configurati tramite il parametro hook.nome_hook.parallel = true. Il numero di lavori eseguiti simultaneamente è determinato dalle impostazioni hook.jobs, hook.<event>.jobs o dall'opzione della riga di comando -j.
  • Nel comando git pack-objects è stata implementata la possibilità di specificare filtri, come blob:none, blob:limit=<n>, tree:0, object:type=<type>, sparse:<oid> e combine:. Nel test condotto, l'esclusione dei 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 appaiono in testo libero (ad esempio, può essere utilizzato negli hook per elaborare i commenti ai commit).

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

Junio C Hamano builtin/commit.c

  • Di default, ora è abilitato l'escaping della maggior parte delle sequenze di controllo del terminale nei messaggi informativi e nel testo di errore trasmesso dal server. Quando si interagisce con un server dannoso, tali sequenze di escape potrebbero essere utilizzate per nascondere o modificare l'output, ad esempio tramite sequenze di escape per spostare il cursore e pulire il testo. È rimasta la compatibilità con le sequenze di escape per evidenziare gli elementi a colori.
  • Il comando git checkout -m ora salva automaticamente le modifiche locali in conflitto nell'area stash senza la 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 strisce verticali durante la visualizzazione dei rami, consentendo di lasciare spazio sullo schermo per le informazioni 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

  • 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 nell'intervallo.

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