udgivelse af et distribueret system til administration af kildekoder . Git er et af de mest populære, pålidelige og højtydende versionsstyringssystemer, der tilbyder fleksible værktøjer til ikke-lineær udvikling, baseret på forgrening og sammenfletning af grene. For at sikre integriteten af historien og modstandsdygtighed over for bagudrettede ændringer anvendes implicit hashing af hele den tidligere historie i hver commit, ligesom det er muligt at validere med digitale signaturer fra udviklere af individuelle tags og commits.
Sammenlignet med den tidligere udgave er der i den nye version foretaget 745 ændringer, forberedt med deltagelse af 74 udviklere, hvoraf 18 deltager for første gang. :
- Den nye tilstand for overførsel af commitsættet «git rebase —rebase-merges», som blev tilgængelig fra version 1.18, erstattede den gamle mulighed «—preserve-merges», som nu er markeret som forældet. Operationen «git rebase» bruges til at erstatte en række commits med en ny basiscommit, for eksempel for at flytte en specifik gren, hvor en ny funktion udvikles, til den aktuelle master-gren, der inkluderer rettelser tilføjet efter forgrening:
o — o — o (my-feature)
/
o — o — o — o — o (master)
o — o — o (my-feature)
/
o — o — o — o — o (master)
For at bevare forgreningsstrukturen i den overførte gren kunne den tidligere anvende muligheden «—preserve-merges», som ved kørsel i interaktiv tilstand (git rebase -i —preserve-merges) tillod redigering af commit-historikken, men som ikke garanterede fuld bevarelse af repository-strukturen. Den nye tilstand «—rebase-merges» tillader bevarelse af ændringsstrukturen i den overførte gren, samtidig med at der tilbydes et komplet sæt interaktive operationer, herunder sletning, omorganisering og omdøbning af commits.
For eksempel «—rebase-merges» at overføre commits fra en separat gren til en nyere master-gren, samtidig med at forgreningsstrukturen i den overførte gren bevares, og at der foretages nogle ændringer i kommentarerne til commitsene undervejs.
- Support has been added for creating a new branch based on the merge base of two other branches using the commands «git branch new A…B» and «git checkout -b new A…B», where «A…B» refers to determining the merge base between the two specified commits, similar to how «git checkout A…B» moves HEAD to the base commit and «diff A…B» shows the changes between commit «B» and the common ancestor with commit «A».
For example, when working on a separate branch my-feature, the proposed feature can be used when starting from another branch, such as from the same point in the master branch from which the my-feature branch was extracted. Previously, this required manually exploring the change log, which was inconvenient with a long history, then executing «git merge-base master my-feature» to compute the merge base hash between the master and my-feature branches, and creating a new branch relative to the common ancestor with «git branch my-other-feature hash». In Git 2.22, to create a branch relative to the merge base of two other branches, you can use the syntax «git branch my-other-feature A…B»;
- The option «git branch —show-current» has been added to display the name of the branch obtained after performing the checkout operation;
- The option «git checkout —no-overlay — dir» has been added, allowing the directory's contents to be fully restored to the state of the master branch during the checkout operation. For instance, if the local copy of directory dir has a file that is missing in the master branch, then by default when executing «git checkout master — dir» it will remain, but if the «—no-overlay» option is specified, it will be deleted;
- A universal API for parsing options has been implemented in the «git diff» command, allowing for unified option handling with other git utilities. For example, in «git diff», all options now have their opposites available («—function-context» and «—no-function-context»);
- The ability to filter extended labels attached to commits in the output of «git log» has been added («trailer» — additional informational flags such as Signed-off-by and Co-authored-by). Filtering by key and value is possible, for example:
«git log —pretty=»%(trailers:key=Reviewed-by,valueonly)»; - En ny Trace2 sporingsmekanisme er blevet tilføjet, som tilbyder et mere fleksibelt og struktureret outputformat. Trace2 muliggør indsamling af telemetri om udførte operationer og præstationsdata for mere detaljeret analyse og fejlfinding (brugeren tildeler en håndtering, ingen data sendes eksternt);
- Rapporten "git bisect" er blevet mere læselig, hvor problematiske commits nu markeret mere tydeligt, og en oversigt over ændringernes statistik for hver fil præsenteres (på niveau med antallet af ændrede linjer);
- Heuristikken til bestemmelse af omdøbning af mapper er blevet revurderet for at undgå falsk mærkning af omdøbninger. Hvis der er tvivl, bliver sådanne mapper nu markeret som konfliktende;
- Advarsler vises nu, når man forsøger at sætte et tag på et andet tag, hvilket typisk sker ved en fejl og kan føre til, at mærkningen ikke sættes på den rigtige commit (for eksempel vil konstruktionen 'git tag -f -m "updated message" my-tag1 my-tag2' føre til, at et tag oprettes på et gammelt tag, mens udvikleren forventede, at det nye tag blev sat på den commit, som det gamle tag peger på);
- Generering til repositories med reachability bitmaps er inkluderet, som gemmer data om mængder af objekter tilgængelige for hver commit og giver mulighed for hurtigt at bestemme tilgængeligheden af et basisobjekt. Den angivne struktur reducerer betydeligt udførelsestiden for datahentningsoperationer (git fetch).
Kilde: opennet.ru
