Git 2.37 source control release

De release van het gedistribueerde bronbeheersysteem Git 2.37 wordt geïntroduceerd. Git is een van de meest populaire, betrouwbare en krachtige versiebeheersystemen die flexibele, niet-lineaire ontwikkeltools biedt op basis van vertakkende en samenvoegende vertakkingen. Om de integriteit van de geschiedenis en weerstand tegen veranderingen met terugwerkende kracht te garanderen, wordt impliciete hashing van de gehele voorgaande geschiedenis in elke commit gebruikt. Het is ook mogelijk om individuele tags en commits te verifiëren met digitale handtekeningen van de ontwikkelaars.

Vergeleken met de vorige release zijn er 395 wijzigingen doorgevoerd in de nieuwe versie, voorbereid met de deelname van 75 ontwikkelaars, van wie er 20 voor het eerst aan de ontwikkeling deelnamen. Belangrijkste innovaties:

  • Het mechanisme van gedeeltelijke indexen (sparse index), dat slechts een deel van de repository bestrijkt, is gereed gemaakt voor wijdverbreid gebruik. Gedeeltelijke indexen kunnen de prestaties verbeteren en ruimte besparen in repository's die gedeeltelijke kloonbewerkingen (sparse-checkout) uitvoeren of werken met een onvolledige kopie van de repository. De nieuwe release voltooit de integratie van gedeeltelijke indexen in de git show, git sparse-checkout en git stash commando's. Het meest opvallende prestatievoordeel van het gebruik van gedeeltelijke indexen is te zien bij het git stash commando, dat in sommige situaties een toename van 80% in uitvoeringssnelheid heeft gezien.
  • Er is een nieuw “cruft packs”-mechanisme geïmplementeerd voor het verpakken van onbereikbare objecten waarnaar niet wordt verwezen in de repository (waar niet naar wordt verwezen door vertakkingen of tags). Onbereikbare objecten worden verwijderd door de garbage collector, maar blijven een bepaalde tijd in de repository voordat ze worden verwijderd om race-omstandigheden te voorkomen. Om de periode van voorkomen van onbereikbare objecten bij te houden, is het noodzakelijk om er tags aan toe te voegen met de tijd van verandering van soortgelijke objecten, waardoor ze niet in één pakketbestand kunnen worden opgeslagen waarin alle objecten een gemeenschappelijke veranderingstijd hebben. Voorheen leidde het opslaan van elk object in een apart bestand tot problemen als er een groot aantal nieuwe, onbereikbare objecten was die nog niet in aanmerking kwamen voor verwijdering. Met het voorgestelde “cruft packs”-mechanisme kunt u alle onbereikbare objecten in één pakketbestand opslaan en gegevens over de wijzigingstijd van elk object weergeven in een afzonderlijke tabel die is opgeslagen in een bestand met de extensie “.mtimes”.
  • Voor Windows en macOS is er een ingebouwd mechanisme voor het bijhouden van wijzigingen in het bestandssysteem, waardoor je kunt voorkomen dat je door de hele werkmap moet itereren bij het uitvoeren van bewerkingen zoals “git status”. Voorheen konden externe hulpprogramma's voor het volgen van wijzigingen in de FS, zoals Watchman, via hooks worden aangesloten om wijzigingen bij te houden, maar dit vereiste de installatie van aanvullende programma's en configuratie. Nu is de gespecificeerde functionaliteit ingebouwd en kan worden ingeschakeld met het commando “git config core.fsmonitor true”.
  • In het commando “git sparse-checkout” is ondersteuning voor een alternatief voor de “—cone” modus, de methode voor het definiëren van sjablonen voor gedeeltelijk klonen, verouderd verklaard, waardoor bij het bepalen van het deel van de repository dat onderhevig is aan de kloonbewerking, om individuele bestanden weer te geven met behulp van de syntaxis “.gitignore”, die het gebruik van gedeeltelijke indexen voor optimalisatie niet toestaat.
  • Verhoogde flexibiliteit bij het configureren van de fsync()-aanroep om wijzigingen naar de schijf te wissen. Ondersteuning voor de ‘batch’-synchronisatiestrategie is toegevoegd aan de parameter ‘core.fsyncMethod’, waarmee het werk kan worden versneld bij het schrijven van een groot aantal individuele bestanden door het verzamelen van wijzigingen in de terugschrijfcache, die wordt gereset door een enkele fsync() telefoongesprek. De test, die resulteerde in het toevoegen van 500 bestanden met behulp van het “git add” commando, werd in 0.15 seconden voltooid toen de nieuwe modus was ingeschakeld, terwijl het aanroepen van fsync() 1.88 seconden duurde voor elk bestand, en zonder gebruik van fsync - 0.06 seconden.
  • Branch traversal commando's zoals “git log” en “git rev-list” hebben nu een optie “-since-as-filter=X” waarmee je informatie kunt filteren over commits die ouder zijn dan “X”. In tegenstelling tot de optie “—since” wordt het nieuwe commando geïmplementeerd als een filter dat het zoeken niet stopt na de eerste commit die ouder is dan de opgegeven tijd.
  • In het commando “git remote” wordt bij het specificeren van de vlag “-v” informatie over gedeeltelijke klonen van de repository weergegeven.
  • Instelling "transfer.credentialsInUrl" toegevoegd, die de waarden "warn", "die" en "allow" kan aannemen. Indien gespecificeerd in de parameter “remote. .url"-inloggegevens in platte tekst, zal een poging om een ​​"fetch"- of "push"-bewerking uit te voeren mislukken met een foutmelding als de instelling "transfer.credentialsInUrl" is ingesteld op "die", of een waarschuwing als deze is ingesteld op "warn".
  • Standaard is de nieuwe implementatie van de interactieve modus van het “git add -i” commando, herschreven van Perl naar C, ingeschakeld.

Bron: opennet.ru

Voeg een reactie