Efter tre mÄnaders utveckling har den distribuerade versionshanteringssystemet Git 2.52 slÀppts. Git kÀnnetecknas av hög prestanda och erbjuder verktyg för icke-linjÀr utveckling baserade pÄ grenhantering och sammanfogning av grenar. För att sÀkerstÀlla integriteten av historien och motstÄndskraft mot förÀndringar "i efterhand" anvÀnds implicit hashing av hela den tidigare historien i varje commit, samt digitala signaturer frÄn utvecklare av specifika taggar och commits. Koden för Git distribueras under licensen GPLv2+.
JÀmfört med föregÄende version har den nya versionen antagit 637 Àndringar, som har förberetts av 94 utvecklare (33 deltog för första gÄngen i utvecklingen av Git). Huvudnyheterna (1, 2, 3):
- En ny kommando "git last-modified" har lagts till för att visa en lista över filer i en angiven revision och commits genom vilka de senaste Àndringarna har gjorts i varje av dessa filer. $ git last-modified HEAD b56f6dcd7b4c90192018e848d0810f091d092913 test.h 29330ae4b820147c98e723399e9438c8bee60a8a test1.c 573ad8917beb99dc643b6e7f5c117a294384a575 test2.c
- Kommando "git repo" har lagts till för att utföra Ă„tgĂ€rder relaterade till hĂ€mtning av information frĂ„n ett lager. TvĂ„ underkommandon â "git repo info" och "git repo structure", som visar information om lagrets instĂ€llningar och information om lagerstrukturen (till exempel kan du fĂ„ reda pĂ„ antalet referenser och objekt i lagret). $ git repo info object.format references.format object.format=sha1 references.format=reftable $ git repo structure | Lagerstruktur | VĂ€rde | | âââââââ | ââ | | * Referenser | | | * Antal | 1983 | | * Grenar | 4 | | * Taggar | 1125 | | * Remoter | 854 | | * Ăvriga | 0 | | | | | * TillgĂ€ngliga objekt | | | * Antal | 518955 | | * Commits | 77469 | | * TrĂ€d | 188865 | | * Blobs | 251631 | | * Taggar | 990 |
- Till kommandot "git refs" har tre underkommandon lagts till för att förena olika och överlappande lÄgnivÄoperationer pÄ referenser (git for-each-ref, git show-ref, git update-ref och git pack-refs):
- "git refs optimize" â optimering av backend-lagring av referenser (i likhet med "git pack-refs").
- "git refs list" â visar en lista över alla referenser (i likhet med "git for-each-ref" eller "git show-ref").
- "git refs exists" â kontrollerar om en referens existerar (motsvarar "git show-ref âexists").
- Formatet för export eller import av commit-historik har utökats med möjligheten att arbeta med kryptografiska signaturer som anvĂ€nder bĂ„de SHA-1 och SHA-256 som objektidentifierare. Stödet för att hantera signerade taggar pĂ„ liknande sĂ€tt som signerade commits har implementerats i kommandot "git fast-import". Alternativen "âsigned-commits=" och "âsigned-tags=" har lagts till för att styra behandling av signerade commits och taggar under importsteget (lĂ€get kan anta vĂ€rdena verbatim, warn-verbatim, warn-stri, strip eller abort).
- Kommandot "git maintenance" har fÄtt stöd för den nya strategin "geometric" ("git config set maintenance.strategy geometric"), som gör det möjligt att minska underhÄllstiden för stora monorepositorier. JÀmfört med tidigare tillgÀnglig strategi, som anvÀnder logik frÄn kommandot "git gc", undviker den nya strategin att ompacka alla objekt och utesluter överdrivet resurskrÀvande operationer som att slÄ samman alla pack-filer (om möjligt görs sammanslagning i delar utan att rensa bort borttagna objekt).
- Kommandot "git sparse-checkout clean" har lagts till för att förenkla ÄterstÀllningen av arbetskatalogens tillstÄnd genom att ta bort filer som inte överensstÀmmer med den nya definitionen av sparse-checkout, och som inte bör finnas i den lokala kopian enligt de aktuella sparsesta-instÀllningarna.
- För att förenkla kodbasen och underhÄllet har en omstrukturering genomförts för att minska anvÀndningen av den globala variabeln the_repository.
- AnvÀndningen av Bloom-filter, en probabilistisk struktur för att kontrollera medlemmar i en mÀngd som tillÄter falska positiva men utesluter att man missar existerande element, har utvidgats. Bloom-filter anvÀnds nu för att pÄskynda sökningar i Àndringshistoriken nÀr maskar i filvÀgar anges, till exempel "foo/bar/*/baz".
- Prestandan för kommandot "git describe" har förbÀttrats med 30% tack vare anvÀndning av prioritetsköer. Operationerna för att döpa om referenser i "git remote rename" har snabbsatts. TillÀmpningen av index har utvidgats i "git ls-files". Arbetet med kommandot "git log -L" har avsevÀrt snabbats upp, tack vare att överflödiga tre-nivÄjÀmförelser eliminera vid bearbetning av commit-sammanslagningar. Optimeringar har gjorts i biblioteket xdiff.
- Det har lagts till en valfri möjlighet att anvÀnda implementationer pÄ sprÄk som Rust för vissa interna funktioner, sÄsom kodning och avkodning av heltal med variabel lÀngd. Som standard anvÀnds inte kod i Rust, och för att aktivera det krÀvs ange byggflaggan WITH_RUST. I framtiden förvÀntas en omarbetning pÄ Rust av fler betydande interna komponenter i Git och att Rust kommer att bli ett obligatoriskt byggberoende i Git 3.0.
- Listan över brytande Àndringar har uppdaterats som kommer att tillÀmpas i Git 3.0-grenen. I Git 3.0 har det beslutats att Àndra den standardinstÀllning för init.defaultBranch till "main", vilket innebÀr att i repositoryn som skapas med kommandot "git init", kommer standardgrenen att kallas "main" istÀllet för "master". Det noteras ocksÄ ett skifte till objektidentifierare baserade pÄ SHA-256 hash-algoritmen vid initiering av nya repositoryn. För att underlÀtta portabilitet mellan repositoryn med objektidentifierare baserade pÄ SHA-1 och SHA-256, har det lagts till möjlighet att utföra push- och pull-operationer frÄn en repository med en hash-algoritm till en annan.
KĂ€lla: opennet.ru
