Rilascio del sistema di controllo delle versioni Git 2.37

È stata rilasciata la versione del sistema di gestione distribuita dei sorgenti Git 2.37. Git è uno dei sistemi di gestione delle versioni più popolari, affidabili e ad alte prestazioni, che offre strumenti flessibili per lo sviluppo non lineare, basati su ramificazioni e fusioni di rami. Per garantire l'integrità della storia e la resilienza alle modifiche retroattive, si utilizza l'hashing implicito dell'intera storia precedente in ogni commit, è anche possibile la certificazione tramite firme digitali degli sviluppatori per singoli tag e commit.

Rispetto alla versione precedente, nella nuova versione sono stati introdotti 395 cambiamenti, preparati con la partecipazione di 75 sviluppatori, di cui 20 hanno partecipato per la prima volta allo sviluppo. Le principali novità sono:

  • È stato portato a compimento il meccanismo degli indici parziali (sparse index), che copre solo una parte del deposito. Gli indici parziali consentono di migliorare le prestazioni e risparmiare spazio nei depositi in cui vengono eseguite operazioni di clonazione parziale (sparse-checkout) o si lavora con una copia incompleta del deposito. Nella nuova versione è stato completato il lavoro sull'integrazione degli indici parziali nei comandi "git show", "git sparse-checkout" e "git stash". Il guadagno di prestazioni più evidente dall'uso degli indici parziali si osserva nel comando "git stash", la cui velocità di esecuzione è aumentata in alcune situazioni fino all'80%.
  • È stato implementato un nuovo meccanismo "cruft packs" per imballare oggetti irraggiungibili, ai quali non esistono collegamenti nel repository (non sono referenziati da rami o tag). Gli oggetti irraggiungibili vengono rimossi dal garbage collector, ma prima della rimozione rimangono nel repository per un certo periodo per escludere stati di race. Per monitorare il periodo in cui si trovano gli oggetti irraggiungibili è necessaria l'associazione di etichette con il timestamp di modifica di tali oggetti, il che non consente di conservarli in un unico file di pack, in cui tutti gli oggetti hanno un timestamp comune. La precedente pratica di salvare ogni oggetto in un file separato portava a problemi nel caso ci fossero molti nuovi oggetti irraggiungibili, non ancora soggetti a rimozione. Il meccanismo proposto "cruft packs" consente di memorizzare tutti gli oggetti irraggiungibili in un unico file di pack, mentre i dati sul timestamp di modifica di ciascun oggetto sono riflessi in una tabella separata, memorizzata in un file con estensione ".mtimes".
  • Per Windows e macOS è stato implementato un meccanismo integrato di monitoraggio delle modifiche nel file system, che consente di evitare di esaminare l'intero catalogo di lavoro durante l'esecuzione di operazioni come "git status". In passato, per il monitoraggio delle modifiche attraverso hook erano necessarie utility esterne di monitoraggio delle modifiche nel file system, come Watchman, ma ciò richiedeva l'installazione di programmi aggiuntivi e configurazioni. Ora questa funzionalità è integrata e può essere abilitata con il comando "git config core.fsmonitor true".
  • Nella squadra "git sparse-checkout" è stata dichiarata obsoleta la supporto del modo alternativo "—cone" per il metodo di definizione dei modelli per il cloning parziale, che consentiva di elencare file separati utilizzando la sintassi di "gitignore" durante la definizione della parte del repository che rientra nell'operazione di cloning, rendendo impossibile l'utilizzo di indici parziali per l'ottimizzazione.
  • È stata aumentata la flessibilità nella configurazione della chiamata fsync() per scrivere modifiche su disco. Nel parametro «core.fsyncMethod» è stata aggiunta la supporto per la strategia di sincronizzazione «batch», che consente di accelerare le operazioni durante la scrittura di un gran numero di file separati accumulando modifiche nella cache di scrittura retroattiva, che vengono scritte con un'unica chiamata a fsync(). Un test condotto, durante il quale sono stati aggiunti 500 file con il comando «git add», è stato completato in 0,15 secondi con la modalità attivata, mentre la chiamata a fsync() per ogni file ha richiesto 1,88 secondi e senza l'uso di fsync è stato di 0,06 secondi.
  • Nei comandi di traversamento dei rami, come «git log» e «git rev-list», è stata aggiunta l'opzione «—since-as-filter=X», che consente di filtrare le informazioni sui commit la cui data di creazione è più vecchia di «X». A differenza dell'opzione «—since», il nuovo comando è implementato come un filtro che non interrompe l'iterazione dopo il primo commit più vecchio di un dato tempo.
  • Nel comando «git remote», specificando il flag «-v», è stata fornita l'uscita delle informazioni sui cloni parziali del repository.
  • È stata aggiunta l'impostazione «transfer.credentialsInUrl», che può assumere i valori «warn», «die» e «allow». Se nel parametro «remote..url» vengono forniti credenziali in chiaro, il tentativo di eseguire operazioni «fetch» o «push» restituirà un errore se l'impostazione «transfer.credentialsInUrl» è impostata su «die», oppure un avviso se è impostata su «warn».
  • Di default è stata attivata una nuova implementazione della modalità interattiva del comando «git add -i», riscritta da Perl in C.

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