Release van het gedistribueerde broncontrolesysteem Git 2.31

Het gedistribueerde bronbeheersysteem Git 2.31 is nu beschikbaar. Git is een van de meest populaire, betrouwbare en krachtige versiebeheersystemen en biedt flexibele, niet-lineaire ontwikkeltools op basis van vertakken en samenvoegen. Om de integriteit van de geschiedenis en weerstand tegen veranderingen met terugwerkende kracht te garanderen, wordt in elke commit impliciete hashing van de gehele voorgaande geschiedenis gebruikt; het is ook mogelijk om individuele tags en commits te certificeren met digitale handtekeningen van de ontwikkelaars.

Vergeleken met de vorige release bevatte de nieuwe versie 679 wijzigingen, voorbereid met de deelname van 85 ontwikkelaars, van wie er 23 voor het eerst aan de ontwikkeling deelnamen. Belangrijkste innovaties:

  • Het commando “git onderhoud” toegevoegd, waarmee u periodiek werk kunt uitvoeren op systemen die cron niet ondersteunen. Met een nieuwe opdracht kunt u er bijvoorbeeld voor zorgen dat het verpakkingsproces van de repository periodiek wordt uitgevoerd, zodat u niet hoeft te wachten tot de repository is vergrendeld wanneer het verpakken automatisch wordt uitgevoerd terwijl verschillende opdrachten worden uitgevoerd. Met het commando “git Maintenance” kunt u optimalisaties en bewerkingen uitvoeren om de optimale structuur van de repository op de achtergrond te behouden, zonder de interactieve sessie te blokkeren - één keer per uur wordt er gewerkt aan het proactief downloaden van nieuwe objecten uit een externe repository en het bijwerken van de bestand met de commit-grafiek, en het proces van het inpakken van de repository begint elke nacht .
  • Ondersteuning toegevoegd voor het onderhouden van een omgekeerde index (revindex) op schijf voor pack-bestanden. Bedenk dat Git alle gegevens opslaat in de vorm van objecten, die zich in afzonderlijke bestanden bevinden. Om de efficiëntie van het werken met de repository te vergroten, worden objecten bovendien in pack-bestanden geplaatst, waarin informatie wordt gepresenteerd in de vorm van een stroom van objecten die elkaar opvolgen (een soortgelijk formaat wordt gebruikt bij het overbrengen van objecten met de git fetch en git push commando's). Voor elk packbestand wordt een indexbestand (.idx) aangemaakt, waarmee u zeer snel de offset in het packbestand kunt bepalen waarin het betreffende object is opgeslagen met behulp van de objectidentifier. De omgekeerde index (.rev), geïntroduceerd in Git 2.31, is gericht op het optimaliseren van het proces van het bepalen van een object-ID op basis van informatie over de plaatsing van een object in een pack-bestand.

    Voorheen werd een dergelijke conversie direct uitgevoerd tijdens het parseren van het packbestand en werd deze alleen in het geheugen opgeslagen, waardoor vergelijkbare indexen niet opnieuw konden worden gebruikt en de index elke keer opnieuw moest worden gegenereerd. De bewerking van het bouwen van een index komt neer op het construeren van een array van object-positieparen en het sorteren ervan op positie, wat bij grote pakketbestanden lang kan duren.

    Een bewerking om de inhoud van objecten weer te geven, waarbij gebruik wordt gemaakt van een directe index, was bijvoorbeeld 62 keer sneller dan een bewerking om de grootte van objecten weer te geven, waarvoor de positie-naar-object-gegevens niet waren geïndexeerd. Na gebruik van de omgekeerde index begonnen deze handelingen ongeveer even lang te duren. Met omgekeerde indexen kunt u ook het verzenden van objecten versnellen bij het uitvoeren van ophaal- en push-opdrachten door kant-en-klare gegevens rechtstreeks van schijf over te dragen. Standaard worden er geen omgekeerde indexen aangemaakt; om ze te genereren moet je de “git config pack.writeReverseIndex true” instelling inschakelen en dan de repository inpakken met het “git repack -Ad” commando.

  • Prestatie-optimalisaties toegevoegd op basis van de weergave in het commit-graph-bestandsformaat, gebruikt om de toegang tot informatie over commits te optimaliseren, nieuwe gegevens over het commit-generatienummer, die kunnen worden gebruikt om aanvullende bewerkingen met commits te versnellen.
  • Opties toegevoegd voor het opnieuw definiëren van de naam van de hoofdvertakking die standaard wordt gebruikt in nieuwe repository's (init.defaultBranch-instelling). Bij het benaderen van externe repositories probeert git de branch uit te checken waarnaar HEAD verwijst, d.w.z. als de externe server standaard de "main" branch gebruikt, zal de "git clone" operatie proberen om "main" lokaal uit te checken. Git 2.31 ondersteunt nu dit type checkout voor lege repository's. Wanneer u bijvoorbeeld een nieuwe repository lokaal kloont voordat u de eerste patches eraan toevoegt, zal de lokale kopie nu de standaard upstream-naam bevatten die op de externe server is ingesteld.
  • Een --disk-usage optie toegevoegd aan het "git rev-list" commando om een ​​samenvatting te geven van de grootte van objecten.
  • Vooruitlopend op de komende wijziging in de samenvoeg-backend is de hernoemingsdetectie aanzienlijk geoptimaliseerd.
  • Ondersteuning voor de oudere PCRE1 reguliere expressiebibliotheek is stopgezet.
  • Het is mogelijk om het gebruik van verkorte links met geweld te verbieden, ongeacht het hash-algoritme. Het verbod wordt ingeschakeld door de waarde “no” toe te wijzen aan de parameter core.abbrev.
  • De optie "--path-format=(absolute|relative)" is toegevoegd aan het "git rev-parse" commando om expliciet te specificeren of relatieve of absolute paden moeten worden uitgevoerd.
  • Bash-aanvullingsscripts maken het gemakkelijk om voltooiingsregels toe te voegen voor je eigen "git"-subopdrachten.
  • Een --stdin optie toegevoegd aan het "git Bundle" commando om referenties uit de standaard invoerstroom te lezen.
  • Een nieuwe optie "--diff-merges=" is toegevoegd aan het "git log" commando.
  • Optie "--deduplicatecan" toegevoegd aan het commando "git ls-files" om dubbele uitvoer te elimineren.
  • Nieuwe maskers toegevoegd om een ​​reeks commits uit te sluiten - “^!” en "^-".
  • Opties "--left-only" en "--right-only" toegevoegd aan het "git range-diff" commando om slechts één kant van het bereik te tonen dat wordt vergeleken.
  • --skip-to=" en "--rotate-to=" opties toegevoegd aan de "git diff" en "git log" commando's om de initiële paden over te slaan of naar het einde ervan te gaan.
  • De optie "--skip-to=" is toegevoegd aan het commando "git difftool" om een ​​onderbroken sessie vanaf een willekeurig pad te hervatten.
  • De Code-of-conduct, waarin de basisprincipes zijn vastgelegd voor het oplossen van conflictsituaties tussen ontwikkelaars, is bijgewerkt naar versie 2.0 (voorheen werd versie 1.4 gebruikt).

    Bron: opennet.ru

Voeg een reactie