Geïntroduceerd de release van het gedistribueerde systeem voor versiebeheer van broncode Git 2.54. Git biedt hoge prestaties en stelt niet-lineaire ontwikkeling mogelijk door middel van takken en samenvoegen. Om de integriteit van de geschiedenis te waarborgen en bestand te zijn tegen 'retroactieve' wijzigingen, maakt het gebruik van impliciete hashing van de volledige eerdere geschiedenis in elke commit, evenals verificatie door middel van digitale handtekeningen van ontwikkelaars voor afzonderlijke tags en commits. Git-code wordt verspreid is gelicentieerd onder GPLv2+.
In vergelijking met de vorige versie zijn er 770 wijzigingen doorgevoerd, voorbereid met de deelname van 137 ontwikkelaars (waarvan 66 voor het eerst betrokken waren bij de ontwikkeling van Git).
-
De opdracht «git history» is geïmplementeerd, die experimentele mogelijkheden biedt voor het herschrijven van de wijzigingsgeschiedenis, dat eenvoudiger en veiliger is in gebruik dan het rebasen van commits met de git rebase-opdracht. Er worden twee operaties aangeboden:
- git history reword voor het herschrijven van de boodschap in de opgegeven commit zonder de werkdirectory en index te wijzigen (behalve de opmerking, de rest blijft ongewijzigd). Bijvoorbeeld om een typfout te corrigeren.
- git history split voor interactieve splitsing van de opgegeven commit in twee verschillende commits door geselecteerde delen van de oorspronkelijke commit naar een extra commit te verplaatsen.
In toekomstige versies worden extra commando's verwacht: git history fixup voor het corrigeren van een commit, git history drop voor het verwijderen van een commit, git history reorder voor het veranderen van de volgorde van commits en git history squash voor het samenvoegen van commits.
-
Een nieuwe methode voor het definiëren van handlers (hook) in configuratiebestanden is geïmplementeerd. In plaats van scripts voor handlers in de map .git/hooks in elke repository te plaatsen, kunnen de commando's voor het aanroepen van handlers nu direct in configuratiebestanden worden gedefinieerd. Instellingen kunnen worden gekoppeld aan de repository of worden opgegeven in configuratiebestanden die voor alle repositories gelden (/etc/gitconfig) of gebruikersrepositories (~/.gitconfig). Meerdere handlers kunnen aan één gebeurtenis worden gekoppeld. Scripts uit .git/hooks blijven nog steeds worden aangeroepen, maar worden pas na de handlers uit configuratiebestanden uitgevoerd. Voor het weergeven van de lijst met handlers moet de git hook list-opdracht worden gebruikt, en voor het selectief uitschakelen van het aanroepen van handlers – de instelling hook..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
- In de opdracht «git maintenance» is standaard de strategie geometric ingeschakeld (git config set maintenance.strategy geometric), wat de onderhoudstijd van grote monorepositories verkort. In vergelijking met de eerder gebruikte strategie, die de logica van de git gc-opdracht volgde, vermijdt de nieuwe strategie het opnieuw verpakkend van alle objecten en sluit het onnodig resource-intensievere bewerkingen uit, zoals het samenvoegen van alle pack-bestanden (voor zover mogelijk gebeurt dit gefaseerd en zonder het opruimen van verwijderde objecten).
- De objectdatabase (ODB) en de bijbehorende API zijn overgezet naar een nieuwe architectuur, gebaseerd op het gebruik van plug-in backends. De herstructurering abstraheert het opslagformaat van objecten en zal in de toekomst mogelijkheden realiseren, zoals alternatieve backends en objectformaten, bijvoorbeeld voor een efficiëntere opslag van grote binaire bestanden of voor het optimaliseren van de werking van grote git-hostings.
- In de opdracht «git repo structuur», die informatie over de structuur van de repository uitvoert, toont niet alleen totale grootte, maar ook de grootste objecten van elk type, waardoor het mogelijk is de grootte te beoordelen zonder gebruik te maken van externe tools. git-sizer.
$ git repo structure … | * Grootste objecten | | | * Commits | | | * Maximale grootte [1] | 17.23 KiB | | * Maximale ouders [2] | 10 | | * Trees | | | * Maximale grootte [3] | 58.85 KiB | | * Maximale item [4] | 1.18 k | | * Blobs | | | * Maximale grootte [5] | 1019.51 KiB | | * Tags | | | * Maximale grootte [6] | 7.13 KiB |
- In de opdracht «git replay», die in plaats van git rebase wordt gebruikt om de geschiedenis op de server zonder werkdirectory te reconstrueren, heeft standaard atomair bijwerken van verwijzingen ingeschakeld (in plaats van een lijst van update-ref opdrachten voor handmatige uitvoering), omvat de optie —revert voor het terugdraaien van wijzigingen van een reeks commits, en zorgt ervoor dat resulterende lege commits worden weggelaten en er een mogelijkheid is om de geschiedenis tot de root commit te reconstrueren.
- In «git rev-list» en vergelijkbare opdrachten is de optie —maximal-only toegevoegd om alleen commits te tonen die niet door andere commits bereikbaar zijn.
- In de opdracht «git repo info» is de optie —keys toegevoegd om een lijst van alle bekende sleutels weer te geven.
- In de opdracht «git add -p» Bij het navigeren tussen codeblokken met de toetsen «J» en «K» is gemarkeerd wat al is goedgekeurd en overgeslagen. Een optie —no-auto-advance is toegevoegd om de automatische overgang naar het volgende bestand uit te schakelen, zodat je kunt terugkeren naar eerdere bestanden voordat je commit.
- De webinterface «gitweb» is geoptimaliseerd voor gebruik op mobiele apparaten.
- In de opdracht «git apply –directory» ervoor is de normalisatie van bestands paden, zoals .\/un\/..\/normalized\/path, verzekerd.
- De mogelijkheid om aangepaste subcommando's toe te voegen is gedocumenteerd door bestanden git- in de map met uitvoerbare bestanden te plaatsen.
- In de opdracht «git send-email» heeft ondersteuning voor clientcertificaten toegevoegd.
- Voor het commando «git status» is de instelling status.compareBranches geïmplementeerd, waarmee je de branches kunt aangeven waarmee de huidige branch vergeleken zal worden:
[status] compareBranches = @{upstream} @{push}
- In «git rebase» heeft de optie —trailer toegevoegd voor het vereenvoudigen van het toevoegen van metadata aan alle commits:
git rebase —trailer "Reviewed-by: Test "`
- In de opdracht «git fast-import» heeft de mogelijkheid toegevoegd om handtekeningen voor commits te vervangen die ongeldig zijn geworden na import.
- Ondersteuning voor het verpakken (compaction) van multi-pack-indexen MIDX (multi-pack index) is toegevoegd, waarbij kleine lagen van de MIDX-index met informatie over de beschikbaarheid van objecten en de bijbehorende bitmap-bestanden worden samengevoegd, wat het aantal opgestapelde lagen in oudere repositories vermindert.
- In het git backfill-commando is de mogelijkheid geïmplementeerd om revisies (commitbereiken) en padmaskers (pathspec) op te geven om de delen van de wijzigingsgeschiedenis die gedownload worden te beperken:
git backfill main~100..main git backfill — ‘*.c’
- Alternatieve vormen van het aanroepen van het commando git config list zijn toegevoegd – git config -l en git config —list.
- Het gebruik van niet-ASCII-tekens in de namen van commandopseudoniemen, die in het configuratiebestand zijn gedefinieerd, is toegestaan:
[alias "get"] command = fetch
- De weergave van handtekeningen waarvan de GPG-sleutel is verlopen, maar die geldig waren op het moment van ondertekening van de commit, is gewijzigd. Dergelijke handtekeningen worden nu weergegeven als geldig met een opmerking over het verouderen van de sleutel (vroeger werden ze in het rood gemarkeerd, wat de indruk wekte dat ze ongeldig waren).
- Bij het aanspreken van de repositories via HTTP is er een foutafhandeling geïmplementeerd voor code 429 (Te veel verzoeken). Verzoeken die met een dergelijke fout eindigen, worden nu niet langer beschouwd als een fatale fout, maar als een tijdelijke fout waarvoor na enige tijd de operatie opnieuw moet worden uitgevoerd. De vertraging voordat een nieuwe poging wordt gedaan, kan worden ingesteld via de optie http.retryAfter, het aantal herhalingen – http.maxRetries, en de wachttijd – http.maxRetryTime.
Bron: linux.org.ru
