Uitgave van het versiebeheersysteem Git 2.39

Na twee maanden ontwikkeling is de release van het gedistribueerde systeem voor broncodebeheer Git 2.39 gepubliceerd. Git is een van de meest populaire, betrouwbare en krachtige versiebeheersystemen, die flexibele middelen voor niet-lineaire ontwikkeling biedt, gebaseerd op takken en samensmelting. Om de integriteit van de geschiedenis en de bestendigheid tegen "backdating" te waarborgen, wordt impliciete hashing van de gehele eerdere geschiedenis in elke commit gebruikt. Ook is het mogelijk om digitale handtekeningen van ontwikkelaars voor afzonderlijke tags en commits te verifiƫren.

In vergelijking met de vorige release zijn 483 wijzigingen in deze nieuwe versie opgenomen, voorbereid met de deelname van 86 ontwikkelaars, van wie 31 voor het eerst deelnam aan de ontwikkeling. De belangrijkste vernieuwingen zijn:

  • Aan het commando "git shortlog", dat bedoeld is om samenvattingen met statistieken uit de wijzigingsgeschiedenis weer te geven, is de optie "—group" toegevoegd voor willekeurige groepering van commits op velden die niet beperkt zijn tot auteur of committer. Bijvoorbeeld, om een lijst van ontwikkelaars te tonen met informatie over het aantal wijzigingen, inclusief helpers die in het veld "Co-authored-by" zijn vermeld, kan de volgende opdracht worden gebruikt: git shortlog -ns —group=author —group=trailer:co-authored-by

    De uitvoer van shortlog kan worden geaggregeerd met behulp van formatteringsspecificaties en de optie "--group" maakt het aanzienlijk eenvoudiger om complexe rapporten te creƫren en het uitvoeren van extra sorteercommando's te vermijden. Bijvoorbeeld, om een rapport te maken met informatie over hoeveel commits voor een bepaalde release elke maand zijn geaccepteerd, kan men opgeven: git shortlog v2.38.0.. --date='format:%Y-%m' --group='' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 Eerder zou het uitvoeren van een dergelijke bewerking de inzet van de hulpprogramma's sort en uniq vereisen: git log v2.38.0.. --date='format:%Y-%m' --format='' | sort | uniq -c

  • De mogelijkheden van het mechanisme "cruft packs" zijn uitgebreid, bedoeld voor het verpakken van onbereikbare objecten waar geen verwijzingen naar bestaan in de repository (geen verwijzingen van takken of tags). Onbereikbare objecten worden door de garbage collector verwijderd, maar blijven enige tijd in de repository voordat ze worden verwijderd om toestanden van race-omstandigheden uit te sluiten. Het mechanisme "cruft packs" maakt het mogelijk om alle onbereikbare objecten in ƩƩn pack-bestand op te slaan, terwijl de gegevens over de tijd van wijziging van elk object worden weergegeven in een aparte tabel, opgeslagen in een apart bestand met de extensie ".mtimes", zodat deze niet overlappen met de algemene wijzigingstijd.

    De tijd dat onbereikbare objecten in de repository verbleven voordat ze daadwerkelijk werden verwijderd, wordt bepaald door de optie "--prune=". Hoewel de vertraging voor verwijdering een effectieve en praktische manier is om schade aan de repository door race-omstandigheden te voorkomen, is het niet 100% betrouwbaar. Om het herstel van een beschadigde repository te vergemakkelijken, is in de nieuwe release de mogelijkheid toegevoegd om ontbrekende objecten op te slaan; daartoe is de optie "--expire-to" aan de "git repack"-opdracht toegevoegd, waarmee een bestand kan worden opgegeven voor het maken van een externe kopie van alle verwijderde objecten. Bijvoorbeeld, om onbereikbare objecten op te slaan in het bestand backup.git die in de laatste 5 minuten niet zijn gewijzigd, kan de opdracht worden gebruikt: git repack --cruft --cruft-expiration=5.minutes.ago -d --expire-to=../backup.git

  • De snelheid van de operatie "git grep --cached" is aanzienlijk verhoogd (tot 70%) bij het zoeken in gebieden waar gedeeltelijke kloning (sparse-checkout) wordt toegepast en voor welke gedeeltelijke indexen (sparse index) beschikbaar zijn. Voorheen werd bij het opgeven van de optie "--cached" eerst in de gebruikelijke index gezocht en vervolgens in de gedeeltelijke, wat leidde tot merkbare vertragingen bij het zoeken in grote repositories.
  • De uitvoering is versneld voor de server de controle van de samenhang van nieuwe objecten voordat ze in de repository worden geplaatst tijdens de operatie "git push". Door over te schakelen naar het alleen controleren van aangekondigde verwijzingen, hebben de aangebrachte optimalisaties in een testrepository met 7 miljoen verwijzingen, waarvan slechts 3% door de operatie push werd bereikt, de controle tijd met 4,5 keer verminderd.
  • Om te beschermen tegen mogelijke integer-overflows in de code, is de maximale grootte van verwerkte patches in het commando 'git apply' beperkt. Als de grootte van de patch 1 GB overschrijdt, wordt er nu een foutmelding weergegeven.
  • Om potentiĆ«le kwetsbaarheden te beschermen, zijn er wijzigingen aangebracht om onnodige informatie uit de headers die worden verzonden bij het gebruik van de h2h3-module met de optie GIT_TRACE_CURL=1 of GIT_CURL_VERBOSE=1 samen met HTTP/2 te verwijderen.
  • Bij het uitvoeren van de checkout-bewerking met een branch die een symbolische link naar een andere branch is, geeft het commando 'git symbolic-ref HEAD' nu de naam van de doeltak weer in plaats van de naam van de symbolische link.
  • Ondersteuning voor het argument @{-1} is toegevoegd in de optie '--edit-description' ('git branch --edit-description @{-1}') voor het bewerken van de beschrijving van de vorige branch.
  • De command 'git merge-tree --stdin' is toegevoegd, waarmee een lijst met parameters via de standaardinvoer kan worden doorgegeven.
  • Op netwerkbestandsystemen is de fsmonitor-handler, die veranderingen in het bestandssysteem volgt, standaard uitgeschakeld.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster