Release van gedistribueerd broncontrolesysteem Git 2.24

Beschikbaar release van een gedistribueerd broncontrolesysteem Git 2.24.0. 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 544 wijzigingen, voorbereid met de medewerking van 78 ontwikkelaars, van wie er 21 voor het eerst aan de ontwikkeling deelnamen. De belangrijkste innovaties:

  • Ondersteuning toegevoegd voor configuratiemacro's, waarmee u snel kunt schakelen tussen verschillende sets instellingen zonder in detail te treden over de specifieke opties die daaraan gekoppeld zijn. Met behulp van macro's hoeft u niet te onthouden welke instellingen moeten worden gewijzigd om deze of gene functionaliteit te activeren. Als een grote repository bijvoorbeeld langzaam is, wilt u mogelijk overschakelen naar een nieuwe indexeringsengine, compressie van padvoorvoegsels inschakelen en de niet-bijgehouden bestandscache inschakelen door index.version in te stellen op 4 en core.untrackedCache in te schakelen. Met macro's verspilt u geen tijd aan het zoeken naar de juiste oplossing in de documentatie, maar activeert u onmiddellijk instellingen met optimalisaties voor repositories met een groot aantal bestanden:

    git config feature.manyFiles waar

  • Standaard ingeschakeld is de opslag van objecten in de vorm van een commit-grafiek (commit-graph), waarbij niet een lineaire lijst van hashes van objecten met links naar andere objecten, maar een structuur in de vorm van een grafiek wordt gebruikt voor het indexeren . Als het voorheen, om de releases te bepalen die een bepaalde oplossing bevatten, nodig was om elk object van schijf te laden om naar links te zoeken, dan kunt u, wanneer opgeslagen in de vorm van een grafiek, onmiddellijk alle benodigde links bepalen. Door over te schakelen naar opslag in de vorm van een commit-grafiek in de Linux-kernel- en Git-repository's konden we een bijna tweevoudige toename bereiken in de prestaties van bewerkingen met branches. Om de nieuwe opslagmethode in te schakelen na het upgraden naar Git 2.24, moet je het commando "git gc" uitvoeren.

    Onder de veranderingen die verband houden met commit-graph merken we ook op dat de implementatie van de operatievoortgangsindicator in commit-graph-gerelateerde commando’s (“git commit-graph write”, “git commit-graph verificatie”, etc.) is gebracht naar een gemeenschappelijke vorm met andere opdrachten. .). De voortgangsindicator wordt nu standaard alleen voor de terminal weergegeven (gebruik de optie "-[no-]progress" om het gedrag te wijzigen). Bovendien is er een nieuwe configuratieparameter fetch.writeCommitGraph toegevoegd, die het automatisch bijwerken van het bestand met de commit-grafiek tijdens “git fetch”-bewerkingen mogelijk maakt (alle commits die uit externe repository's worden opgehaald, gaan onmiddellijk naar de commit-grafiek zonder de noodzaak om voer auto-gc afzonderlijk uit);

  • Een opdracht toegevoegd om de wijzigingsgeschiedenis te overschrijven - "git filter-repo", wat een eenvoudiger alternatief is voor het commando "git filterbranch» om bewerkingen uit te voeren op de geschiedenis van wijzigingen in de repository (bijvoorbeeld het verwijderen van een bestand uit de repository of het ophalen van de geschiedenis van wijzigingen in een specifieke map). Om de efficiëntie te verbeteren, voert git filter-repo, in plaats van het ordelijk parseren van commits per commit, bewerkingen uit op de geschiedenisrepresentatie in de vorm van een continue stroom.

    Geschiedenisfiltering wordt uitgevoerd met behulp van de optie “-path-{glob,regex}”, waarmee u zowel eenvoudige maskers als reguliere expressies kunt gebruiken. Er zijn ook opties om een ​​zoek-en-vervang-bewerking uit te voeren of binaire objecten op te ruimen die groter zijn dan een opgegeven grootte. Elke herschreven commit wordt voorzien van een nieuwe SHA-1 hash-identificator en alle verwijzingen naar de vervangen commit worden bijgewerkt in overeenstemming met de nieuwe identificator.

    Om een ​​samenvatting van statistieken over de repository weer te geven (aantal objecten per type, grootste bestanden en mappen, welke extensies meer schijfruimte vereisen, enz.), is de optie “-analyze” voorzien. Om de functionaliteit uit te breiden is het mogelijk om willekeurige callback-handlers in Python aan te sluiten, waarmee je zowel nieuwe subcommando's kunt maken als verschillende gebeurtenissen kunt verwerken (bijvoorbeeld nieuwe bestandstypen);

  • Optie "--end-of-options" toegevoegd om opties te scheiden van linknamen, die kunnen beginnen met een "-" teken en behandeld kunnen worden als opties ("git log --end-of-options -super-dangerous-option" ). Als in het dagelijks leven dergelijke namen kunnen worden geëscaped als “git log ‘refs/heads/—super-dangerous-option’”, dan zouden de scripts problemen kunnen hebben bij het definiëren van de naamruimte. Het algemeen geaccepteerde scheidingsteken " - " is in dit geval niet van toepassing, omdat het al wordt gebruikt om linknamen van bestanden te scheiden (bijvoorbeeld: “git log —end-of-options —super-dangerous-option ^master — pad/naar /bestand");
  • Opties "--strategy" en "--strategy-option" toegevoegd aan "git rebase --rebase-merges" om te selecteren fusiestrategieën;
  • Een nieuwe ".git/hooks/pre-merge-commit" handler toegevoegd die wordt aangeroepen nadat een merge is voltooid, maar voordat de resulterende commit is geschreven;
  • Ondersteuning voor het voltooien van configuratievariabelen met betrekking tot de instellingen van specifieke opdrachten is toegevoegd aan de engine voor het voltooien van opdrachten.
    Als je bijvoorbeeld “git -c core.autocrlf=false add path/to/my/file” moet typen maar je de exacte naam van de “core.autocrlf” variabele niet meer weet, kun je op Tab drukken en een hint.

Daarnaast Git-ontwikkelaars toegevoegd gedragscode voor een projectdeelnemer, waarin de basisprincipes voor het oplossen van conflictsituaties worden gedefinieerd. Het document is gebaseerd op de aanbevelingen "Bijdragerconvenant", gebruikt in veel open source-projecten, waaronder de Linux-kernel, Eclipse, Freedesktop, GitLab, Ruby en Kubernetes. Het document definieert gelijke kansen voor alle deelnemers, ongeacht hun wereldbeeld, leeftijd, geslacht, religieuze voorkeuren, opleidingsniveau, sociale status en nationaliteit. De gemeenschap verwelkomt een vriendelijke vorm van communicatie, begrip, empathie voor de problemen van andere deelnemers, het accepteren van constructieve kritiek en het nemen van de beste beslissingen voor de hele gemeenschap. Trollen, aanstootgevende communicatie, pogingen tot vernedering, intimidatie, schending van de privacy, openbaarmaking van persoonlijke informatie en andere handelingen die als ongepast kunnen worden beschouwd voor professionele communicatie zijn niet toegestaan.

Bron: opennet.ru

Voeg een reactie