Præsenteret udgivelsen af et distribueret system til styring af kildekoder Git 2.54. Git har en høj ydeevne og tilbyder værktøjer til ikke-lineær udvikling baseret på forgrening og sammensmeltning af grene. For at sikre integriteten af historikken og modstandsdygtighed over for 'backdating' anvendes implicit hashing af hele den tidligere historie i hver commit, samt digitale signaturer fra udviklerne til specifikke tags og commits. Git-kode distribueres under GPLv2+ licensen.
Sammenlignet med den tidligere version er der implementeret 770 ændringer i den nye version, forberedt med deltagelse af 137 udviklere (66 deltager i udviklingen af Git for første gang).
-
Der er introduceret en kommando «git history», der tilbyder eksperimentelle muligheder for at omskrive ændringshistorikken, som er enklere og sikre at bruge end at rebase commits med kommandoen git rebase. Der tilbydes to operationer:
- git history reword <commit> til at omskrive meddelelsen i den valgte commit uden at ændre arbejdsområdet og indekset (bortset fra noten, forbliver resten uændret). For eksempel til at rette en tastefejl.
- git history split <commit> til interaktivt at opdele den angivne commit i to forskellige commits ved at flytte udvalgte dele fra den oprindelige commit til en ekstra commit.
I fremtidige udgivelser forventes det, at der vil blive tilføjet yderligere kommandoer: git history fixup til at rette en commit, git history drop til at fjerne en commit, git history reorder til at ændre rækkefølgen af commits og git history squash til at sammenflette commits.
-
En ny metode til at definere hooks (hook) i konfigurationsfiler er blevet implementeret. I stedet for at placere scripts med hooks i mappen .git/hooks i hver repository, kan kommandoerne til kald af hooks nu specificeres direkte i konfigurationsfilerne. Indstillinger kan knyttes til repositoryet eller angives i konfigurationsfiler, der gælder for alle repositories (/_etc/_gitconfig) eller brugerens repositories (~/.gitconfig). Det er muligt at knytte flere hooks til en enkelt begivenhed. Scripts fra .git/hooks vil stadig blive kaldt, men de køres efter hooks fra konfigurationsfilerne. For at se listen over hooks skal kommandoen git hook list bruges, og for selektivt at deaktivere kaldet til hooks – indstillingen hook.<name>.enabled = false:
[hook "linter"] event = pre-commit command = ~\/bin\/linter —cpp20 [hook "no-leaks"] event = pre-commit command = ~\/bin\/leak-detector $ git hook list pre-commit global linter ~\/bin\/linter —cpp20 local no-leaks ~\/bin\/leak-detector
- I team "git maintenance" benyttes standardstrategien geometric (git config set maintenance.strategy geometric), som reducerer vedligeholdelsestiden for store monorepositories. I forhold til den tidligere anvendte strategi, der bruger logikken fra git gc-kommandoen, undgår den nye strategi at ompakke alle objekter og udelukker ressourcekrævende operationer, såsom at sammenlægge alle pakke-filer (hvor muligt udføres sammenlægningen i dele og uden oprydning af slettede objekter).
- Objektdatabasen (ODB) og de tilknyttede API'er er blevet overført til en ny arkitektur baseret på brugen af plug-in backend. Den gennemførte omstrukturering abstraherer formatet for objektlagring og vil i fremtiden muliggøre funktioner såsom alternative backends og objektformater, f.eks. til mere effektiv lagring af store binære filer eller til optimering af driften af store git-hosting.
- I team "git repo struktur", der giver oplysninger om repository-strukturen, sikrer visning af ikke blot den samlede størrelse, men også visning af de største objekter af hver type, hvilket muliggør en vurdering uden at bruge eksterne værktøjer. git-sizer.
$ git repo struktur … | * Største objekter | | | * Kommitter | | | * Maksimal størrelse [1] | 17.23 KiB | | * Maksimale forældre [2] | 10 | | * Træer | | | * Maksimal størrelse [3] | 58.85 KiB | | * Maksimale poster [4] | 1.18 k | | * Blobs | | | * Maksimal størrelse [5] | 1019.51 KiB | | * Tags | | | * Maksimal størrelse [6] | 7.13 KiB |
- I team "git replay", der anvendes i stedet for git rebase til at genskabe historien på serveren uden et arbejdsområde, inkluderer som standard atomisk opdatering af referencer (i stedet for at udskrive listen over update-ref-kommandoer til manuel udførelse), implementeret muligheder —revert for at annullere ændringer fra en serie af commits, sikrer bortfald af resulterende tomme commits og muligheden for at genskabe historien helt til roden af commit.
- I "git rev-list" og lignende kommandoer er der tilføjet mulighed —maximal-only til kun at vise commits, der ikke kan nås af andre commits.
- I kommandoen "git repo info" er der tilføjet mulighed —keys for at udskrive listen over alle kendte nøgler.
- I team "git add -p» Ved navigation mellem kodeblokke ved hjælp af tasterne «J» og «K» er der mulighed for at markere allerede godkendte og overset blokke. Der er tilføjet en mulighed —no-auto-advance for at deaktivere den automatiske overgang til næste fil, så man kan vende tilbage til tidligere filer før commit.
- Der er gennemført en optimering af webgrænsefladen «gitweb» til brug på mobile enheder.
- I team "git apply –directory» før brug er der sikret normalisering af filstier, som f.eks. ./un/../normalized/path.
- Muligheden for at tilføje egne underkommandoer er dokumenteret ved at placere filer git-<cmd> i mappen med eksekverbare filer.
- I kommandoen "git send-email» der er tilføjet support for klientcertifikater.
- For kommandoen «git status» er der implementeret en indstilling status.compareBranches, hvor man kan angive de grene, der skal sammenlignes med den nuværende gren:
[status] compareBranches = @{upstream} @{push}
- I "git rebase» der er tilføjet en mulighed —trailer for at forenkle tilføjelsen af metadata til alle commits:
git rebase —trailer "Reviewed-by: Test <test@example.com>"`
- I kommandoen "git fast-import» der er tilføjet mulighed for at erstatte signaturer for commits, der er blevet ugyldige efter importen.
- Der er tilføjet støtte til komprimering (compaction) af multipakkede indekser MIDX (multi-pack index), hvor små MIDX-lag med tilgængelighedsoplysninger og tilhørende bitmap-filer samles, hvilket reducerer antallet af akkumulerede lag i eksisterende repositoryer.
- I kommandoen git backfill er det nu muligt at angive revisioner (intervaller af commits) og stimestre (pathspec) for at begrænse de dele af ændringshistorikken, der bliver downloadet:
git backfill main~100..main git backfill — ‘*.c’
- Alternativet til at kalde kommandoen git config list er tilføjet – git config -l og git config —list.
- Brugen af ikke-ASCII-tegn i kommandopseudonymers navne angivet i konfigurationsfilen er godkendt:
[alias "fetch"] command = fetch
- Visningen af signaturer, hvor GPG-nøglerne er udløbet, men som var gyldige på tidspunktet for commit-signeringen, er ændret. Sådanne signaturer vises nu som gyldige med en note om nøglets udløb (tidligere blev de markeret med rødt, hvilket gav indtryk af, at de var ugyldige).
- Når du tilgår repositories via HTTP, er fejlbehandling med kode 429 (Too Many Requests) blevet implementeret. Anmodninger, der afsluttes med en sådan fejl, betragtes nu ikke længere som fatale problemer, men som midlertidige fejl, hvor operationen skal gentages efter et stykke tid. Forsinkelsen før gentagelse indstilles gennem indstillingen http.retryAfter, antallet af gentagelser – http.maxRetries, og ventetiden – http.maxRetryTime.
Kilde: linux.org.ru
