Efter tre måneders udvikling er version 2.52 af det distribuerede system til styring af kildekoder Git blevet offentliggjort. Git udmærker sig ved sin høje ydeevne og tilbyder værktøjer til ikke-lineær udvikling baseret på grene og sammenlægning. For at sikre integriteten af historien og modstandsdygtigheden over for 'tilbagevirkende' ændringer anvendes implicit hashing af hele den tidligere historie i hver commit samt digitale signaturer fra udviklere til identifikation af specifikke tags og commits. Git-koden distribueres under GPLv2+-licensen.
I forhold til den tidligere version er der i denne nye version accepteret 637 ændringer, der er foretaget med deltagelse af 94 udviklere (33 deltager for første gang i udviklingen af Git). De vigtigste nyheder (1, 2, 3):
- Der er tilføjet kommandoen «git last-modified» for at vise en liste over filer i den angivne revision og commits, der har foretaget de seneste ændringer i hver af disse filer. $ git last-modified HEAD b56f6dcd7b4c90192018e848d0810f091d092913 test.h 29330ae4b820147c98e723399e9438c8bee60a8a test1.c 573ad8917beb99dc643b6e7f5c117a294384a575 test2.c
- Der er tilføjet kommandoen «git repo» for at udføre handlinger relateret til at hente information fra et repository. To underkommander er blevet foreslået — «git repo info» og «git repo structure», som viser information om repository-indstillingerne og oplysninger om repository-strukturen (for eksempel kan man få at vide, hvor mange references og objekter der er i repositoryet). $ git repo info object.format references.format object.format=sha1 references.format=reftable $ git repo structure | Repository struktur | Værdi | | ——————— | —— | | * References | | | * Antal | 1983 | | * Branches | 4 | | * Tags | 1125 | | * Remotes | 854 | | * Andre | 0 | | | | | * Tilgængelige objekter | | | * Antal | 518955 | | * Commits | 77469 | | * Trees | 188865 | | * Blobs | 251631 | | * Tags | 990 |
- Tre underkommander er blevet tilføjet til kommandoen «git refs», som forener de fragmenterede og overlappende lavniveau operationer på references (git for-each-ref, git show-ref, git update-ref og git pack-refs):
- «git refs optimize» — optimering af backend-opbevaringen af references (analogt med «git pack-refs»).
- «git refs list» — viser en liste over alle references (analogt med «git for-each-ref» eller «git show-ref»).
- «git refs exists» — tjekker eksistensen af en reference (analogt med «git show-ref —exists»).
- Formatet til eksport eller import af commit-historier er blevet udvidet med muligheden for at arbejde med kryptografiske signaturer, der bruger både SHA-1- og SHA-256-baserede objektidentifikatorer. Kommandoen «git fast-import» understøtter nu behandlingen af signerede tags analogt med signerede commits. Der er tilføjet indstillingerne «—signed-commits=<tilstand>» og «—signed-tags=<tilstand>» til styring af behandlingen af signerede commits og tags under importen (tilstanden kan være verbatim, warn-verbatim, warn-stri, strip eller abort).
- Kommandoen «git maintenance» har fået tilføjet support til den nye strategi «geometric» («git config set maintenance.strategy geometric»), som reducerer vedligeholdelsestiden for store monorepositorier. I forhold til den tidligere strategi, der bruger logikken fra kommandoen «git gc», undgår den nye strategi at repacke alle objekter og undgår ressourcetunge operationer, såsom sammensmeltning af alle pack-filer (sammensmeltningen sker i mulige bidder og uden oprydning af slettede objekter).
- Der er tilføjet kommandoen «git sparse-checkout clean» for at forenkle gendannelsen af arbejdsbibliotekets tilstand ved at fjerne filer, der ikke stemmer overens med den nye definition af sparse-checkout, og som ikke bør være til stede i den lokale kopi i henhold til de nuværende sparse-checkout-parametre.
- For at fjerne kompleksiteter fra kodebasen og forenkle vedligeholdelsen er der blevet udført en refaktorering for at reducere brugen af den globale variabel the_repository.
- Brugen af Bloom-filtre, en probabilistisk struktur til at kontrollere medlemskab i en mængde, er blevet udvidet. Bloom-filtre tillader falske positive, men udelukker overspring af eksisterende elementer. Bloom-filtre anvendes nu for at fremskynde søgningen i ændringshistorikken ved angivelse af masker i filstier, for eksempel «foo/bar/*/baz».
- Ydelsen af kommandoen «git describe» er blevet forbedret med op til 30% takket være brugen af prioritetskøer. Operationerne til omdøbning af referencer i «git remote rename» er blevet accelereret. I «git ls-files» er brugen af indekser blevet udvidet. Kommandoen «git log -L» er blevet betydeligt hurtigere ved at undgå unødvendige tre-niveau-sammenligninger under behandling af merge commits. Der er foretaget optimeringer i xdiff-biblioteket.
- Der er mulighed for at bruge implementationer i Rust for nogle interne funktioner, såsom kodning og dekodning af variabel længde heltalsværdier. Som standard bruges Rust-koden ikke, og for at aktivere det kræver det, at byggeflaget WITH_RUST angives. I fremtiden forventes det, at flere betydningsfulde interne komponenter i Git vil blive omskrevet i Rust, og at Rust vil blive en af de obligatoriske byggeafhængigheder i Git 3.0.
- Listen over bagudkompatible ændringer, der vil blive anvendt i Git 3.0-grenen, er blevet opdateret. I Git 3.0 er det besluttet at ændre standardindstillingen for init.defaultBranch til "main", hvilket betyder, at i de repositories, der oprettes med kommandoen "git init", vil standardgrenen blive navngivet "main" i stedet for "master". Derudover bemærkes det, at der som standard vil være et skift til objekt-id'er baseret på SHA-256 hashing-algoritmen ved initialisering af nye repositories. For at lette portabiliteten mellem repositories med objekt-id'er baseret på SHA-1 og SHA-256 er der mulighed for at foretage push- og pull-operationer mellem repositories, der bruger forskellige hashing-algoritmer.
Kilde: opennet.ru
