Release av distribuerat källkontrollsystem Git 2.22

Introducerad lansering av ett distribuerat källkontrollsystem Git 2.22.0. Git är ett av de mest populära, pålitliga och högpresterande versionskontrollsystemen, som tillhandahåller flexibla icke-linjära utvecklingsverktyg baserade på förgrening och sammanslagning. För att säkerställa historiens integritet och motståndet mot retroaktiva förändringar används implicit hashing av hela den tidigare historien i varje commit, och det är också möjligt att certifiera individuella taggar och commits med digitala signaturer från utvecklare.

Jämfört med den tidigare utgåvan inkluderade den nya versionen 745 ändringar, förberedda med deltagande av 74 utvecklare, varav 18 deltog i utvecklingen för första gången. Den huvudsakliga innovationer:

  • Tillgängligt sedan release 1.18, det nya commit rebase-läget "git rebase --rebase-merges" ersätter det gamla alternativet "--preserve-merges", som nu är utfasat. Operationen "git rebase" används för att ersätta en serie commits med en ny base commit, till exempel för att flytta en separat gren som utvecklar någon ny funktion till mastergrenens nuvarande tillstånd, vilket inkluderar fixar som läggs till efter grenen :

    o - o - o (min-funktion)

    /

    o - o - o - o - o (mästare)

    o - o - o (min-funktion)

    /

    o - o - o - o - o (mästare)

    För att bevara grenstrukturen i en migrerad gren kunde alternativet "—preserve-merges" tidigare användas, vilket, när det kördes i interaktivt läge (git rebase -i —preserve-merges), tillät redigering av commit-historiken, men inte garantera fullständigt bevarande av förvarsstrukturen. Det nya läget "--rebase-merges" låter dig bevara strukturen för förändringar i grenen som migreras, samtidigt som du tillhandahåller ett komplett utbud av interaktiva operationer, inklusive radering, omgruppering och byte av bekräftelser.

    Till exempel, "--rebase-merges" det gör ladda om commits från en separat gren till en nyare mastergren, samtidigt som grenstrukturen i den migrerade grenen bibehålls, och gör några ändringar i commit-anteckningarna i farten.

  • Lade till stöd för att skapa en ny gren baserat på resultatet av att bestämma sammanslagningsbasen för två andra grenar (sammanfogningsbas, bindning till en gemensam förfader) med konstruktionerna "git branch new A...B" och "git checkout -b new A...B", där "A ...B" innebär att definiera en sammanslagningsbas mellan två specificerade commits, liknande hur "git checkout A...B" flyttar HEAD till bascommit och "diff A. ..B" visar förändringarna mellan commit "B" och samma som commit "A" "Ancestor.

    Till exempel, när du arbetar på en separat my-feature-gren, kan den här funktionen användas när du vill starta från en annan gren, till exempel från samma plats i huvudgrenen som my-feature-grenen checkades ut från. Tidigare krävde detta att man manuellt undersökte ändringsloggen, vilket var obekvämt om du hade en stor historik av ändringar, och sedan körde "git merge-base master my-feature" för att beräkna hashen för sammanslagningsbasen mellan master- och my-feature-grenarna. och skapa en ny gren i förhållande till den gemensamma förfadern "git branch my-other-feature hash." I Git 2.22 kan du använda syntaxen "git branch my-other-feature A...B" för att skapa en gren relativt sammanslagningsbasen för två andra grenar;

  • Lade till alternativet "git branch --show-current" för att visa namnet på filialen som erhölls under kassan;
  • Lade till alternativet "git checkout —no-overlay — dir", som gör det möjligt att, när man utför en utcheckningsoperation, bringa innehållet i dir-katalogen till en form som helt motsvarar tillståndet för mastergrenen. Till exempel, om det finns en fil i den lokala kopian av dir-katalogen som inte finns i huvudgrenen, kommer den som standard att lämnas när du kör "git checkout master - dir", och om "--no-overlay" " alternativet är specificerat, det kommer att raderas;
  • Kommandot "git diff" använder ett universellt API för att analysera alternativ, vilket gör det möjligt att förena alternativhantering med andra git-verktyg. Till exempel, i "git diff", har alla alternativ nu sina antagonister ("--function-context" och "--no-function-context");
  • Lade till möjligheten att filtrera utökade taggar kopplade till commits i "git log"-utgången ("trailer" - ytterligare informationsflaggor, såsom Signed-off-by och Co-authored-by). Det är möjligt att filtrera etiketter efter både nyckel och värde, till exempel:
    "git log --pretty="%(trailers:key=Reviewed-by,valueonly)";

  • En ny spårningsmotor, Trace2, har lagts till, som erbjuder ett mer flexibelt och strukturerat utdataformat. Trace2 låter dig samla in telemetri om utförda operationer och prestandadata för mer detaljerad analys och felsökning (hanteraren tilldelas av användaren, ingen data skickas externt);
  • Rapporten "git bisect" har gjorts mer läsbar, där problematiska commits nu markeras tydligare och sammanfattande statistik över ändringar för varje fil visas (på nivån för antalet ändrade rader);
  • Heuristiken för att fastställa katalogbyte har omarbetats för att eliminera felaktig installation av namnbyteetiketter. Vid tveksamhet markeras nu sådana kataloger som motstridiga;
  • En varning visas när du försöker installera en tagg på en annan tagg, vilket vanligtvis görs av misstag och kan leda till att taggen ställs in på fel commit (till exempel en konstruktion som "git tag -f -m "uppdaterat meddelande" my-tag1 my-tag2″ kommer att resultera i att en tagg skapas på den gamla taggen, medan utvecklaren förväntade sig att den nya taggen skulle installeras på commit som pekade på av den gamla taggen);
  • Generering är aktiverat för bitmappsförråd (diskbaserad "reachability bitmaps"-struktur), som lagrar data om uppsättningar objekt som är tillgängliga för varje commit och låter dig snabbt avgöra närvaron av ett basobjekt. Denna struktur minskar avsevärt exekveringstiden för datahämtning (git fetch).

Källa: opennet.ru

Lägg en kommentar