Release van het versiebeheersysteem Git 2.48

De release van het gedistribueerde versiebeheersysteem Git 2.48 is gepubliceerd. Git staat bekend om zijn hoge prestaties en biedt middelen voor niet-lineaire ontwikkeling, gebaseerd op takken en het samenvoegen van takken. Om de integriteit van de geschiedenis te waarborgen en bestand te zijn tegen 'backwards' wijzigingen, wordt impliciete hashing van de volledige voorgaande geschiedenis in elke commit gebruikt, evenals digitale handtekeningen van ontwikkelaars voor individuele tags en commits. De Git-code wordt gedistribueerd onder de GPLv2+-licentie.

In vergelijking met de vorige release zijn er 605 wijzigingen in de nieuwe versie opgenomen, voorbereid met de medewerking van 93 ontwikkelaars, van wie 35 voor het eerst deelnemen aan de ontwikkeling. Belangrijkste innovaties:

  • De mogelijkheid om op te bouwen met behulp van het bouwsysteem Meson is geïmplementeerd, naast GNU Make en CMake. Voor het bouwen van Git kan nu de opdracht "meson setup build && ninja -C build" worden gebruikt. Het is opgemerkt dat de Makefile, die wordt gebruikt bij GNU Make, is gegroeid tot 3887 regels en niet zo eenvoudig is als gewenst. De Meson-toolkit vereenvoudigt het werken met het bouwsysteem, is gebruiksvriendelijk voor cross-platform builds en maakt de bouw toegankelijker voor nieuwkomers of ontwikkelaars zonder ervaring met de Make-tool. Er zijn geen plannen om de ondersteuning voor Make en CMake in de nabije toekomst te beëindigen.
  • Bouwopties zijn toegevoegd waarmee alternatieve implementaties van de SHA-1-hash kunnen worden gebruikt bij het berekenen van de checksums die worden gebruikt voor de integriteitscontrole van gegevensblokken in pack-bestanden. De prestaties van checksum-berekeningen zijn van groot belang; bijvoorbeeld, bij het klonen van de repository met de Linux-kernel wordt ongeveer 78% van de CPU-tijd besteed aan deze berekeningen. De standaardimplementatie omvat extra controles op botsingen en bescherming tegen aanvallen op SHA-1, zoals SHAttered en Shambles. Dergelijke bescherming, die extra middelen verbruikt, is alleen zinvol bij het gebruik van SHA-1 voor cryptografische doeleinden en nutteloos bij het verifiëren van de integriteit van indexgegevens.

    Voor het bouwen van Git met een snellere implementatie van SHA-1, die niet geschikt is voor cryptosystemen, is een reeks opties *_UNSAFE voorgesteld, zoals "OPENSSL_SHA1_UNSAFE". In GitHub heeft het bouwen met vereenvoudigde SHA-1 de prestaties van data-extractie en -klonen met 10-13% verbeterd.

  • De mogelijkheid om de optie «—remerge-diff» te gebruiken in het «range-diff»-team is toegevoegd, waardoor de verschillen tussen het algemene resultaat van de samensmelting en de werkelijke gegevens, zoals weergegeven in de commit na het uitvoeren van de «merge»-opdracht, kunnen worden weergegeven. Bij gebruik van de optie «—remerge-diff» worden de verschillen tussen de conflictresoluties niet gescheiden voor elke ouderbranch, maar worden de algemene verschillen tussen het bestand met merkongevallen en het bestand waar de conflicten zijn opgelost weergegeven. In de context van de «range-diff»-opdracht kan de nieuwe optie nuttig zijn voor het vergelijken van commitsets na het verplaatsen van de volgorde van commits met de «rebase»-opdracht en de optie «—rebase-merges».
  • Er is een mogelijkheid toegevoegd voor het uitvoeren van een testset in Git met de activatie van de geheugenlekdetectiemodus. Aangezien git hulpprogramma's biedt die hun werking beëindigen nadat de aangeroepen functie is uitgevoerd, werden geheugenlekken eerder niet als een groot probleem beschouwd. De noodzaak om geheugenlekken volledig te elimineren is belangrijker geworden sinds er is begonnen met het extraheren van interne functionaliteit naar een aparte bibliotheek die kan worden gebruikt in langdurige processen.
  • De vorming van een lijst met verouderde modus en functies is begonnen, waarvan de ondersteuning in de toekomst wordt gepland om te worden stopgezet. Verwacht wordt dat de verwijdering van verouderde functionaliteit zal plaatsvinden in Git 3.0, waarin wijzigingen zullen worden aangebracht die de achterwaartse compatibiliteit schenden.
  • De optimalisatie van de «git for-each-ref»-opdracht, die een lijst van verwijzingen in de repository voortbrengt, is voortgezet. De optimalisatie, die de verwerkers voor het filteren van verwijzingen en het opmaken van de uitvoer combineert, wordt nu toegepast niet alleen voor niet-gesorteerde uitvoer, maar ook bij het opgeven van de optie «—sort».
  • De backend-implementatie van «reftable» is verbeterd met een block storage voor effectieve opslag in de repository van verwijzingen naar takken en tags. Reftable maakt het mogelijk om zoeken, lezen en schrijven in repositories met een zeer groot aantal verwijzingen aanzienlijk te versnellen. In de nieuwe versie zijn sommige hulpprogramma-API's stopgezet om de libgit-bibliotheek uit de buildafhankelijkheden te verwijderen. Adaptieve foutafhandeling is geïmplementeerd voor de geheugenallocatiefuncties (geheugen tekort leidt nu niet langer tot een fatale afsluiting). De operaties van het maken van verwijzingen zijn versneld en het geheugenverbruik is verlaagd.
  • In de implementatie van gedeeltelijke kloon zijn problemen opgelost die leidden tot eindeloze lussen en beschadiging van de repository na het uitvoeren van de «git gc»-opdracht.
  • Bij het uitvoeren van het commando «git fetch » wordt, als «refs/remotes//HEAD» niet op het lokale systeem aanwezig is en er aan de andere kant een tak is die verwijst naar HEAD, «refs/remotes//HEAD» nu omgeleid naar deze tak. Om de synchronisatie van «refs/remotes//HEAD» met de HEAD waarde aan de andere kant van de verbinding te beheren, is de instelling remote..followRemoteHEAD» toegevoegd.
  • De instelling «remote..serverOption» is toegevoegd, vergelijkbaar met de commandoregeloptie «--serverOption=».
  • In het commando «git rebase --rebase-merges» wordt waar mogelijk gebruikgemaakt van taknamen als labels.
  • De commando's ‘git notes add’ en ‘git notes append’ hebben de vlag ‘-e’ gekregen, die een opmerking opent in de externe teksteditor die is opgegeven via de omgevingsvariabele GIT_EDITOR.
  • De compatibiliteit met GCC 15 en de C23-norm is verbeterd.
  • De ondersteuning voor oudere versies van libcURL en Perl is stopgezet.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster