Frigivelse af distribueret kildekontrolsystem Git 2.22

Introduceret frigivelse af et distribueret kildekontrolsystem Git 2.22.0. Git er et af de mest populære, pålidelige og højtydende versionskontrolsystemer, der giver fleksible ikke-lineære udviklingsværktøjer baseret på forgrening og sammensmeltning. For at sikre historiens integritet og modstand mod retroaktive ændringer, anvendes implicit hashing af hele den tidligere historie i hver commit, og det er også muligt at certificere individuelle tags og commits med digitale signaturer fra udviklere.

Sammenlignet med den tidligere udgivelse indeholdt den nye version 745 ændringer, udarbejdet med deltagelse af 74 udviklere, hvoraf 18 deltog i udviklingen for første gang. The main innovationer:

  • Tilgængelig siden udgivelse 1.18, den nye commit rebase-tilstand "git rebase --rebase-merges" erstatter den gamle "--preserve-merges", som nu er forældet. Operationen "git rebase" bruges til at erstatte en række commits med en ny base commit, for eksempel for at flytte en separat gren, der er ved at udvikle en eller anden ny funktion til den nuværende tilstand af mastergrenen, som inkluderer rettelser tilføjet efter grenen :

    o - o - o (min-funktion)

    /

    o - o - o - o - o (mester)

    o - o - o (min-funktion)

    /

    o - o - o - o - o (mester)

    For at bevare grenstrukturen i en migreret gren kunne "--preserve-merges" muligheden tidligere bruges, som, når den blev kørt i interaktiv tilstand (git rebase -i --preserve-merges), tillod redigering af commit-historikken, men garanterede ikke fuldstændig bevarelse af depotstrukturen. Den nye "--rebase-merges"-tilstand giver dig mulighed for at bevare strukturen af ​​ændringer i den filial, der migreres, samtidig med at den giver et komplet udvalg af interaktive operationer, herunder sletning, omgruppering og omdøbning af commits.

    For eksempel "--rebase-merges" Det gør det muligt gen-upload commits fra en separat gren til en nyere master gren, samtidig med at grenstrukturen i den migrerede gren bevares, og foretag nogle ændringer i commit-noterne i farten.

  • Tilføjet understøttelse til oprettelse af en ny gren baseret på resultatet af at bestemme fusionsbasen for to andre grene (fletningsbase, binding til en fælles forfader) ved hjælp af konstruktionerne "git branch new A...B" og "git checkout -b new A...B", hvor "A ...B" involverer at definere en flettebase mellem to specificerede commits, svarende til hvordan "git checkout A...B" flytter HEAD til base commit og "diff A. ..B" viser ændringerne mellem commit "B" og det samme som commit "A" "Ancestor.

    For eksempel, når du arbejder på en separat my-feature-gren, kan denne funktion bruges, når du vil starte fra en anden gren, for eksempel fra samme sted i master-grenen, hvorfra my-feature-grenen blev tjekket ud. Tidligere krævede dette manuelt at undersøge ændringsloggen, hvilket var ubelejligt, hvis du havde en stor historik med ændringer, og derefter køre "git merge-base master my-feature" for at beregne hashen af ​​flettebasen mellem master- og my-feature-grenene og skabe en ny gren i forhold til den fælles forfader "git branch my-other-feature hash." I Git 2.22 kan du bruge syntaksen "git branch my-other-feature A...B" til at skabe en gren i forhold til flettebasen af ​​to andre grene;

  • Tilføjet "git branch --show-current" mulighed for at vise navnet på filialen opnået under kassen;
  • Tilføjet "git checkout —no-overlay — dir", som gør det muligt, når du udfører en checkout-operation, at bringe indholdet af dir-biblioteket til en form, der fuldt ud svarer til tilstanden for mastergrenen. For eksempel, hvis der er en fil i den lokale kopi af dir-mappen, som ikke er i master-grenen, vil den som standard blive tilbage, når du udfører "git checkout master - dir", og hvis "--no-overlay " indstillingen er angivet, vil den blive slettet;
  • Kommandoen "git diff" bruger en universel API til at parse muligheder, som gør det muligt at forene indstillingshåndtering med andre git-værktøjer. For eksempel, i "git diff", har alle muligheder nu deres antagonister ("--funktionskontekst" og "--ingen funktionskontekst");
  • Tilføjet muligheden for at filtrere udvidede tags knyttet til commits i "git log" output ("trailer" - yderligere informationsflag, såsom Signed-off-by og Co-authored-by). Det er muligt at filtrere etiketter efter både nøgle og værdi, for eksempel:
    "git log --pretty="%(trailers:key=Reviewed-by,valueonly)";

  • En ny sporingsmotor, Trace2, er blevet tilføjet, som tilbyder et mere fleksibelt og struktureret outputformat. Trace2 giver dig mulighed for at indsamle telemetri om udførte operationer og ydeevnedata til mere detaljeret analyse og fejlfinding (behandleren er tildelt af brugeren, ingen data sendes eksternt);
  • Rapporten "git bisect" er blevet gjort mere læsbar, hvor problematiske commits nu er mere tydeligt fremhævet, og sammenfattende statistikker over ændringer for hver fil vises (på niveau med antallet af ændrede linjer);
  • Heuristikken til at bestemme katalogomdøbninger er blevet omarbejdet for at eliminere falsk installation af omdøbningsetiketter. Når du er i tvivl, er sådanne mapper nu markeret som modstridende;
  • En advarsel vises, når du forsøger at installere et tag på et andet tag, hvilket normalt sker ved en fejl og kan føre til, at tagget indstilles på den forkerte commit (f.eks. en konstruktion som "git tag -f -m "opdateret besked" my-tag1 my-tag2″ vil resultere i, at et tag bliver oprettet på det gamle tag, hvorimod udvikleren forventede, at det nye tag blev installeret på den commit, som det gamle tag pegede på);
  • Generering er aktiveret for bitmaplagre (diskbaseret "reachability bitmaps" struktur), som gemmer data om sæt af objekter, der er tilgængelige for hver commit, og giver dig mulighed for hurtigt at bestemme tilstedeværelsen af ​​et basisobjekt. Denne struktur reducerer eksekveringstiden for datahentningsoperationer markant (git fetch).

Kilde: opennet.ru

Tilføj en kommentar