eliberarea unui sistem distribuit de gestionare a codului sursă . Git este unul dintre cele mai populare, fiabile și puternice sisteme de gestionare a versiunilor, oferind instrumente flexibile pentru dezvoltarea non-lineară, bazate pe ramificare și fuziune a ramurilor. Pentru a asigura integritatea istoriei și rezistența la modificări retroactive, se utilizează o hashare implicită a întregii istorii anterioare în fiecare commit, iar cote și commituri pot fi certificate prin semnături digitale ale dezvoltatorilor.
Comparativ cu versiunea anterioară, noua versiune include 504 modificări, realizate cu participarea a 64 de dezvoltatori, dintre care 12 au participat pentru prima dată la dezvoltare. :
- S-a realizat trecerea implicită la a protocolului de comunicare Git, utilizat pentru conectarea la distanță a clientului la serverul Git. A doua versiune a protocolului se remarcă prin posibilitatea de filtrare a ramurilor și etichetelor pe partea serverului, oferind clientului o listă scurtată de referințe. Anterior, la executarea oricărei comenzi de extragere, clientului îi era trimis întotdeauna întreaga listă de referințe din întregul depozit, chiar și atunci când clientul actualiza doar o ramură sau verifica actualitatea copiei sale a depozitului. O altă îmbunătățire importantă este capacitatea de a adăuga noi funcționalități în protocol pe măsură ce apar noi instrumente. Codul clientului rămâne compatibil cu vechiul protocol și poate continua să funcționeze atât cu servere noi, cât și cu cele vechi, revenind automat la prima versiune dacă serverul nu suportă a doua.
- În comanda „git config” a fost adăugată opțiunea „—show-scope”, care simplifică identificarea locului în care sunt definite anumite setări. Git permite definirea setărilor în diferite locuri: în depozit (.git/info/config), în directorul utilizatorului (~/.gitconfig), în fișierul de configurare la nivel de sistem (/etc/gitconfig), precum și prin opțiunile liniei de comandă și variabilele de mediu. Atunci când executați „git config”, este destul de dificil să înțelegeți exact unde este definită setarea dorită. Pentru a rezolva această problemă, opțiunea „—show-origin” era disponibilă, dar aceasta arată doar calea către fișierul în care este definită setarea, ceea ce este util atunci când intenționați să editați fișierul, dar nu ajută dacă doriți să schimbați valoarea prin „git config” folosind opțiunile „—system”, „—global” sau „—local”. Noua opțiune „—show-scope” afișează contextul definirii variabilelor și poate fi utilizată împreună cu „—show-origin”:
$ git —list —show-scope —show-origin
global file:/home/user/.gitconfig diff.interhunkcontext=1
global file:/home/user/.gitconfig push.default=current
[…]
local file:.git/config branch.master.remote=origin
local file:.git/config branch.master.merge=refs/heads/master$ git config —show-scope —get-regexp ‘diff.*’
global diff.statgraphwidth 35
local diff.colormoved plain$ git config —global —unset diff.statgraphwidth
- În setările de legare Utilizarea de măști în URL este permisă. Orice setări HTTP și acreditive în Git pot fi stabilite atât pentru toate conexiunile (http.extraHeader, credential.helper), cât și pentru conexiunile legate de URL (credential.https://example.com.helper, credential.https://example.com.helper). Până acum, utilizarea de măști, cum ar fi *.example.com, era permisă doar pentru setările HTTP, dar nu era suportată pentru legarea acreditivelor. În Git 2.26 aceste diferențe au fost eliminate și, de exemplu, pentru legarea numelui de utilizator la toate subdomeniile, acum se poate specifica:
[credential «https://*.example.com»]
username = ttaylorr
- Continuarea extinderii suportului experimental pentru clonarea parțială (partial clones), care permite transferul doar a unei părți din date și lucrul cu o copie incompletă a repository-ului. În noua versiune a fost adăugată noua comandă „git sparse-checkout add”, care permite adăugarea unor directoare separate pentru aplicarea operațiunii „checkout” doar la o parte din arborele de lucru, în loc de a enumera toate aceste directoare deodată prin comanda „git sparse-checkout set” (se pot adăuga câte un director, fără a reintroduce întreaga listă de fiecare dată).
De exemplu, pentru clonarea repository-ului git/git fără a transfera blob-uri, limitând verificarea doar la directorul rădăcină al copiei de lucru și marcând distinct directoarele „t” și „Documentation” pentru extragere, se poate specifica:$ git clone —filter=blob:none —sparse git@github.com:git/git.git
$ cd git
$ git sparse-checkout init —cone$ git sparse-checkout add t
….
$ git sparse-checkout add Documentation
….
$ git sparse-checkout list
Documentation
t - Performanța comenzii „git grep” folosită pentru căutarea atât în conținutul actual al repository-ului, cât și în revizii istorice, a fost semnificativ crescută. Pentru accelerarea căutărilor, a fost permisă scanarea conținutului arborelui de lucru folosind mai multe fire de execuție („git grep —threads”), dar căutarea în revizii istorice era unifilară. Acum, această limitare a fost eliminată prin implementarea posibilității de paralele a operațiunilor de citire din stocare. Implicit, numărul de fire este setat egal cu numărul de nuclee CPU, ceea ce, în majoritatea cazurilor, nu mai necesită specificarea explicită a opțiunii „—threads”.
- A fost adăugat suport pentru completarea automată a introducerii subcomenzilor, căilor, linkurilor și altor argumente pentru comanda „git worktree”, care permite lucrul cu mai multe copii de lucru ale repository-ului.
- A fost adăugat suport pentru culori vii, pentru care există secvențe de escape ANSI. De exemplu, în setările de colorare a sintaxei „git config —color” sau „git diff —color-moved” prin opțiunea „—format” pentru albastru deschis se poate specifica „%C(brightblue)”.
- A fost adăugată o nouă versiune a scriptului , care asigură integrarea cu mecanismul pentru accelerarea monitorizării modificărilor fișierelor și apariției de fișiere noi. După actualizarea git, este necesar un hook în repository.
- Au fost adăugate optimizări pentru accelerarea operațiunilor de clonare parțială, legate de aplicarea hărților bitilor
(mecanism bitmap) pentru a evita parcurgerea completă a tuturor obiectelor în timpul filtrării livrării. Verificarea blob-urilor (—filter=blob:none și —filter=blob:limit=n) în timpul clonării parțiale se efectuează acum
semnificativ mai repede. GitHub a anunțat aplicarea patch-urilor cu aceste optimizări și suport experimental pentru clonarea parțială. - Comanda „git rebase” a fost transferată pe un alt backend, care folosește în mod implicit mecanismul ‘merge’ (folosit anterior pentru „rebase -i”) în loc de ‘patch+apply’. În unele detalii, back-end-urile se diferențiază, de exemplu, după continuarea operației după rezolvarea conflictului (git rebase —continue) noul backend oferă posibilitatea de a edita mesajul commit-ului, în timp ce vechiul folosea simplu mesajul vechi. Pentru a reveni la comportamentul vechi, se poate utiliza opțiunea „—apply” sau se poate seta variabila de configurare ‘rebase.backend’ la valoarea ‘apply’.
- Exemplul handler-ului pentru parametrii de autentificare specificați prin .netrc a fost transformat într-o formă utilizabilă din cutie.
- A fost adăugată setarea gpg.minTrustLevel pentru a stabili nivelul minim de încredere pentru diverse elemente care efectuează verificarea semnăturii digitale.
- În „git rm” și „git stash” a fost adăugată opțiunea „—pathspec-from-file”.
- A continuat îmbunătățirea seturilor de teste în cadrul pregătirii pentru tranziția la algoritmul de hashing SHA-2 în loc de SHA-1.
Sursa: opennet.ro
