Na twee maanden ontwikkeling is de release van het gedistribueerde versiebeheersysteem Git 2.35 gepubliceerd. Git is een van de meest populaire, betrouwbare en krachtige versiebeheersystemen, die flexibele middelen voor niet-lineaire ontwikkeling biedt, gebaseerd op het splitsen en samenvoegen van takken. Om de integriteit van de geschiedenis en de weerstand tegen 'backtrack'-wijzigingen te waarborgen, wordt er een impliciete hashing van de hele voorgaande geschiedenis in elke commit gebruikt; het is ook mogelijk om digitale handtekeningen van ontwikkelaars voor specifieke tags en commits te verifiëren.
In vergelijking met de vorige release zijn er 494 wijzigingen in de nieuwe versie opgenomen, voorbereid met de deelname van 93 ontwikkelaars, van wie 35 voor het eerst betrokken waren bij de ontwikkeling. Belangrijkste vernieuwingen:
- De mogelijkheden voor het gebruik van SSH-sleutels voor het ondertekenen van Git-objecten met digitale handtekeningen zijn uitgebreid. Om de geldigheidstijd van meerdere sleutels te scheiden, is ondersteuning voor de OpenSSH-directieven 'valid-before' en 'valid-after' toegevoegd, waarmee een correcte werking met handtekeningen na de rotatie van de sleutel van een van de ontwikkelaars kan worden gegarandeerd. Voorheen was er een probleem met het scheiden van handtekeningen van de oude en nieuwe sleutel - als de oude sleutel werd verwijderd, was het niet mogelijk om de handtekeningen die ermee waren gemaakt te controleren, en als deze werd behouden, bleef de mogelijkheid bestaan om nieuwe handtekeningen met de oude sleutel te maken, terwijl deze al was vervangen door een andere sleutel. Met behulp van valid-before en valid-after kan de geldigheid van de sleutels op basis van de tijd van de handtekening worden gescheiden.
- In de instelling merge.conflictStyle, die de modus voor het weergeven van conflicten bij het samenvoegen bepaalt, is er ondersteuning voor de modus 'zdiff3' toegevoegd, die alle standaardregels die aan het begin of einde van het conflict zijn opgegeven, buiten het conflictgebied plaatst, waardoor een compactere weergave van de informatie mogelijk is.
- De opdracht «git stash» heeft de optie «—staged» gekregen, waarmee je alleen de wijzigingen kunt verbergen die aan de index zijn toegevoegd. Dit is handig wanneer je tijdelijk een deel van complexe wijzigingen wilt uitstellen, zodat je eerst kunt toevoegen wat al klaar is en later met de rest verder kunt. Deze modus lijkt op de opdracht «git commit», die alleen de wijzigingen in de index vastlegt, maar in plaats van een nieuwe commit te maken, wordt het resultaat in «git stash —staged» opgeslagen in een tijdelijke stash. Wanneer de wijzigingen weer nodig zijn, kunnen ze teruggehaald worden met de opdracht «git stash pop».
- Aan de opdracht «git log» is een nieuwe opmaakparameter «—format=%(describe)» toegevoegd, waarmee de uitvoer van «git log» kan worden gecombineerd met het resultaat van de opdracht «git describe». De parameters voor «git describe» worden direct binnen de opmaakparameter opgegeven («—format=%(describe:match=<foo>,exclude=<bar>)»), waarbij ook verkorte tags kunnen worden opgenomen («—format=%(describe:tags=<bool>)») en het aantal hexadecimale symbolen voor de identificatie van objecten kan worden ingesteld («—format=%(describe:abbrev=<n>)»). Bijvoorbeeld, om de laatste 8 commits weer te geven waarvan de tags geen release-candidate-label hebben, en om 8-tekenidentificatoren aan te geven, kan de opdracht worden gebruikt: $ git log -8 —format=’%(describe:exclude=*-rc*,abbrev=13)’ v2.34.1-646-gaf4e5f569bc89 v2.34.1-644-g0330edb239c24 v2.33.1-641-g15f002812f858 v2.34.1-643-g2b95d94b056ab v2.34.1-642-gb56bd95bbc8f7 v2.34.1-203-gffb9f2980902d v2.34.1-640-gdf3c41adeb212 v2.34.1-639-g36b65715a4132
- In de instelling user.signingKey is ondersteuning voor nieuwe typen sleutels geïmplementeerd, die niet beperkt zijn tot het type «ssh-» en het opgeven van het volledige bestandspad naar de sleutel. Alternatieve typen worden opgegeven met de prefix «key::», bijvoorbeeld «key::ecdsa-sha2-nistp256» voor ECDSA-sleutels.
- De snelheid van het genereren van de lijst met wijzigingen in de modus «—histogram» is aanzienlijk verhoogd, evenals bij het gebruik van de optie «—color-moved-ws», die het kleuren van spaties in een kleurdiff controleert.
- In de opdracht «git jump», die wordt gebruikt om Vim informatie te geven over exacte overgangen naar de gevraagde positie in een bestand bij het oplossen van samenvoegconflicten, het bekijken van verschillen of het uitvoeren van een zoekopdracht, is de mogelijkheid toegevoegd om de omvang van de samenvoegconflicten te beperken. Bijvoorbeeld, om de bewerkingen alleen tot de directory «foo» te beperken, kan «git jump merge — foo» worden opgegeven, en om de map «Documentation» uit te sluiten, kan «git jump merge — ‘:^Documentation'» worden gebruikt.
- Er is gewerkt aan de standaardisatie van het gebruik van het type «size_t» in plaats van «unsigned long» voor waarden die de grootte van objecten vertegenwoordigen, wat de mogelijkheid biedt om de filters «clean» en «smudge» te gebruiken met bestanden groter dan 4 GB op alle platforms, inclusief platforms met het LLP64 datamodel, waarin het type «unsigned long» is beperkt tot 4 bytes.
- De «git am»-opdracht heeft de optie «—empty=(stop|drop|keep)» gekregen, waarmee bij het analyseren van patches uit de e-mail het gedrag voor lege berichten zonder patches kan worden gekozen. De waarde «stop» leidt tot beëindiging van de hele patch-toepassingsoperatie, «drop» slaat de lege patch over en «keep» creëert een lege commit.
- De opdrachten «git reset», «git diff», «git blame», «git fetch», «git pull» en «git ls-files» hebben ondersteuning gekregen voor gedeeltelijke indexen (sparse index), waardoor de prestaties worden verbeterd en opslagruimte in repositories wordt bespaard bij het uitvoeren van gedeeltelijke kloonoperaties (sparse-checkout).
- De opdracht «git sparse-checkout init» is verouderd verklaard, en in plaats daarvan moet «git sparse-checkout set» worden gebruikt.
- Een initiële implementatie van de nieuwe backend «reftable» is toegevoegd voor het opslaan van verwijzingen, zoals takken en tags, in de repository. De nieuwe backend maakt gebruik van opslag in blokken, toegepast door het JGit-project, en is geoptimaliseerd voor het opslaan van een zeer groot aantal verwijzingen. De backend is nog niet geïntegreerd met het verwijzingssysteem (refs) en is nog niet klaar voor praktisch gebruik.
- Het kleurenschema van de «git grep»-opdracht is in overeenstemming gebracht met de GNU grep-tool.
Bron: opennet.ru
