Lansarea sistemului de control al surselor distribuite Git 2.22

Introdus lansarea unui sistem distribuit de control al sursei git 2.22.0. Git este unul dintre cele mai populare, fiabile și de înaltă performanță sisteme de control al versiunilor, oferind instrumente flexibile de dezvoltare neliniară bazate pe ramificare și îmbinare. Pentru a asigura integritatea istoricului și rezistența la modificări retroactive, se utilizează hashingul implicit al întregului istoric anterior în fiecare commit și este, de asemenea, posibilă certificarea etichetelor și commit-urilor individuale cu semnăturile digitale ale dezvoltatorilor.

În comparație cu versiunea anterioară, noua versiune a inclus 745 modificări, pregătite cu participarea a 74 de dezvoltatori, dintre care 18 au participat pentru prima dată la dezvoltare. Principalul inovații:

  • Disponibil începând cu lansarea 1.18, noul mod commit rebase „git rebase --rebase-merges” înlocuiește vechea opțiune „--preserve-merges”, care este acum depreciată. Operația „git rebase” este folosită pentru a înlocui o serie de comiteri cu un nou commit de bază, de exemplu, pentru a muta o ramură separată care dezvoltă o nouă caracteristică la starea curentă a ramului principal, care include remedieri adăugate după ramură. :

    o - o - o (funcția mea)

    /

    o - o - o - o - o (master)

    o - o - o (funcția mea)

    /

    o - o - o - o - o (master)

    Pentru a păstra structura de ramură într-o ramură migrată, a putut fi folosită anterior opțiunea „--preserve-merges”, care, atunci când rulează în modul interactiv (git rebase -i --preserve-merges), a permis editarea istoricului de comitere, dar nu a garantat păstrarea completă a structurii depozitului. Noul mod „--rebase-merges” vă permite să păstrați structura modificărilor în ramura migrată, oferind în același timp o gamă completă de operațiuni interactive, inclusiv ștergerea, regruparea și redenumirea commit-urilor.

    De exemplu, „--rebase-merges” Acesta permite reîncărcați comiterile dintr-o ramură separată într-o ramură principală mai nouă, menținând în același timp structura ramurilor în ramura migrată și faceți câteva modificări la notele de comitere din mers.

  • S-a adăugat suport pentru crearea unei noi ramuri bazate pe rezultatul determinării bazei de îmbinare a altor două ramuri (bază de îmbinare, legarea la un strămoș comun) folosind construcțiile „git branch new A...B” și „git checkout -b new A...B”, în care „A...B” implică definirea unei baze de îmbinare între două comitări specificate, similar modului în care „git checkout A...B” mută HEAD la comiterea de bază și „diff A. ..B" arată modificările dintre commit "B" și același cu commit "A" "Ancestor.

    De exemplu, când lucrați la o ramură separată a caracteristicii mele, această caracteristică poate fi utilizată atunci când doriți să începeți dintr-o ramură diferită, de exemplu, din același loc din ramura principală din care a fost extrasă ramura caracteristică mea. Anterior, aceasta necesita examinarea manuală a jurnalului de modificări, ceea ce era incomod dacă aveai un istoric mare de modificări, apoi rula „git merge-base master my-feature” pentru a calcula hash-ul bazei de îmbinare între ramurile master și my-feature și crearea unei noi ramuri relativ la strămoșul comun „ git branch my-other-feature hash”. În Git 2.22, puteți folosi sintaxa „git branch my-other-feature A...B” pentru a crea o ramură relativ la baza de îmbinare a altor două ramuri;

  • A fost adăugată opțiunea „git branch --show-current” pentru a afișa numele sucursalei obținute în timpul operațiunii de checkout;
  • S-a adăugat opțiunea „git checkout —no-overlay — dir”, care permite, atunci când se efectuează o operațiune de checkout, să aducă conținutul directorului dir într-un formular care corespunde pe deplin stării ramurii master. De exemplu, dacă există un fișier în copia locală a directorului dir care nu se află în ramura master, atunci în mod implicit la executarea „git checkout master - dir” va fi lăsat, iar dacă „--no-overlay” ” este specificată opțiunea, aceasta va fi ștearsă;
  • Comanda „git diff” folosește un API universal pentru analizarea opțiunilor, ceea ce face posibilă unificarea gestionării opțiunilor cu alte utilitare git. De exemplu, în „git diff”, toate opțiunile au acum antagoniştii lor („--function-context” și „--no-function-context”);
  • S-a adăugat capacitatea de a filtra etichetele extinse atașate la comiteri în ieșirea „git log” („trailer” - semnalizatoare de informații suplimentare, cum ar fi Signed-off-by și Co-autored-by). Este posibil să filtrați etichetele atât după cheie, cât și după valoare, de exemplu:
    "git log --pretty="%(trailers:key=Reviewed-by,valueonly)";

  • Un nou motor de urmărire, Trace2, a fost adăugat, oferind un format de ieșire mai flexibil și mai structurat. Trace2 vă permite să colectați telemetrie despre operațiunile executate și datele de performanță pentru o analiză mai detaliată și depanare (handler-ul este atribuit de utilizator, nicio dată nu este trimisă extern);
  • Raportul „git bisect” a fost făcut mai lizibil, în care commit-urile problematice sunt acum evidențiate mai clar și sunt afișate statistici rezumative privind modificările pentru fiecare fișier (la nivelul numărului de linii modificate);
  • Euristicele pentru determinarea redenumiri directoare au fost reproiectate pentru a elimina instalarea falsă a etichetelor de redenumire. Când aveți îndoieli, astfel de directoare sunt acum marcate ca conflictuale;
  • Este afișat un avertisment atunci când încercați să instalați o etichetă pe o altă etichetă, ceea ce se face de obicei din greșeală și poate duce la setarea etichetei pe o comitere greșită (de exemplu, o construcție precum „git tag -f -m „mesaj actualizat” my-tag1 my- tag2″ va avea ca rezultat crearea unei etichete pe eticheta veche, în timp ce dezvoltatorul se aștepta ca noua etichetă să fie instalată pe commit-ul indicat de eticheta veche);
  • Generarea este activată pentru depozitele de bitmap (structură bazată pe disc „accessability bitmaps”), care stochează date despre seturi de obiecte disponibile pentru fiecare comitere și vă permit să determinați rapid prezența unui obiect de bază. Această structură reduce semnificativ timpul de execuție al operațiunilor de recuperare a datelor (git fetch).

Sursa: opennet.ru

Adauga un comentariu