De release van het gedistribueerde systeem voor broncodebeheer Git 2.55 is aangekondigd. Belangrijke wijzigingen zijn onder andere: standaard ondersteuning voor een build met Rust, implementatie van het fsmonitor-proces voor Linux, een nieuwe strategie voor het opnieuw verpakken van de incrementele MIDX-index, het commando 'git history fixup' voor het corrigeren van commits, optimalisatie van de generatie van bitmaps voor objectbeschikbaarheid, ondersteuning voor parallelle uitvoering van hooks, en het commando 'git format-rev'. De Git-code wordt verspreid onder de GPLv2+-licentie.
In vergelijking met de vorige release zijn er 505 wijzigingen in de nieuwe versie opgenomen, voorbereid met de deelname van 100 ontwikkelaars, 33 daarvan hebben voor het eerst bijgedragen aan de ontwikkeling van Git. Belangrijke nieuwigheden (1, 2, 3):
- Standaard is ondersteuning voor componenten in de programmeertaal Rust ingeschakeld. De compiler rustc
is toegevoegd aan de build-afhankelijkheden. Voor een build zonder Rust kan de vlag 'NO_RUST=1' worden gebruikt bij het starten van de make-tool of '-Drust=disabled' tijdens 'meson configure'. De mogelijkheid om de build met Rust uit te schakelen zal worden ondersteund tot versie 3.0 van Git, waarin Rust verplicht zal zijn als afhankelijkheid. In Rust is een laag ontwikkeld voor de overdraagbaarheid tussen configuraties met SHA-1 en SHA-256 hashes, evenals enkele interne functies, zoals het coderen en decoderen van variable length integers. In de toekomst wordt een herziening van meer significante interne componenten van Git in Rust verwacht. - Aan de experimentele commando 'git history', dat mogelijkheden biedt voor het herschrijven van de wijzigingsgeschiedenis, is de operatie 'git history fixup' toegevoegd voor het corrigeren van commits. De 'fixup'-operatie maakt het mogelijk om wijzigingen, die zijn toegevoegd via 'git add', over te brengen naar een eerdere commit en automatisch alle daaropvolgende commits opnieuw te schrijven, vergelijkbaar met het uitvoeren van het commando 'git commit --fixup=' en het starten van 'git rebase --autosquash ~'.
- Voor het Linux-platform is een achtergrondproces fsmonitor geïmplementeerd, dat wijzigingen in het bestandssysteem bijhoudt met behulp van het inotify-mechanisme en voorkomt dat de hele werkdirectory doorzocht hoeft te worden bij het uitvoeren van commando's zoals 'git status'. De inschakeling gebeurt via de instelling 'core.fsmonitor'.
- Met de opdracht «git repack» is de modus «—write-midx=incremental» geïntroduceerd, die een nieuwe strategie voor het bijwerken van metadata in de incrementele MIDX-index (multi-pack index) implementeert, waardoor het opnieuw verpakkingen van de gehele index overbodig wordt. In de incrementele multi-pack index wordt in plaats van één grote index, die informatie bevat over de distributie van objecten over pack-bestanden, gebruikgemaakt van laaggescheidenheid — elke laag dekt een bepaald aantal pack-bestanden en wordt opgeslagen in een apart bitmap-bestand. Deze structuur maakt het mogelijk om gegevens over objecten in nieuwe pack-bestanden aan de index toe te voegen door nieuwe lagen aan de index te hechten zonder bestaande lagen opnieuw te moeten opbouwen.
Met de opdracht «git repack —write-midx=incremental» kan een nieuwe laag worden toegevoegd aan de incrementele MIDX-index, die recente pack-bestanden omvat. In combinatie met de modus voor het verpakken van repositories «—geometric» maakt de nieuwe opdracht het mogelijk om nieuwe objecten uit meerdere pack-bestanden te combineren in één grotere pack-bestand en indien nodig het inpakken en samenvoegen van meerdere aangrenzende lagen van de incrementele MIDX-index uit te voeren. Deze strategie maakt het mogelijk om bij het uitvoeren van «git repack» alleen de bovenste lagen te herschrijven, terwijl oude grote lagen onaangeroerd blijven, en voorkomt ongecontroleerde groei van de laagketen, waarbij het totale aantal lagen op een niveau wordt gehouden dat evenredig is met de logaritme van het totale aantal objecten.
- De generatie van bitmaps voor de beschikbaarheid van objecten is aanzienlijk geoptimaliseerd dankzij een nieuw algoritme voor het doorlopen van de objectboom, dat onnodige recursie uitsluit, het cachen van objectposities, het sorteren van bitmaps vóór het samenvoegen met de XOR-operatie en het herwerken van de code voor het creëren van pseudo-samenvoegbitmaps. In de testrepository hebben de optimalisaties de tijd voor het genereren van bitmaps verminderd van 612 naar 294 seconden.
- De mogelijkheid voor parallelle uitvoering van onafhankelijke hooks in configuratiebestanden is geïmplementeerd. Hooks die invloed hebben op gedeelde toestand of hiervan afhankelijk zijn, zoals het wijzigen van commit-opmerkingen of het inspecteren van indexen en de werkboom, kunnen niet parallel worden uitgevoerd. Hooks voor linter-controles en het uitvoeren van unittests kunnen echter wel parallel worden uitgevoerd. De hooks die parallel kunnen worden uitgevoerd, worden ingesteld via de parameter "hook.hook_naam.parallel = true". Het aantal gelijktijdig uit te voeren taken wordt bepaald via de instelling hook.jobs, hook..jobs of de opdrachtregeloptie "-j".
- In het commando “git pack-objects --path-walk” is het mogelijk om filters op te geven, zoals "blob:none", "blob:limit=", "tree:0", "object:type=", "sparse:" en "combine:". In de uitgevoerde test leidde het afwijzen van blobs bij de uitvoering van "--path-walk" tot een vermindering van 16% van de grootte van het gevormde pack-bestand.
- Het commando “git format-rev” is toegevoegd voor het formatteren van revisies en objectnamen die worden vermeld in commits of in willekeurige tekst (bijvoorbeeld, dit kan worden gebruikt in hooks voor het verwerken van commit-opmerkingen).
git last-modified | git format-rev —stdin-mode=text —format=%an
Junio C Hamano builtin/commit.c
- Het escapen van de meeste terminalbedieningssequenties is standaard ingeschakeld in informatieve berichten en foutmeldingen die worden doorgegeven. server. Bij toegang tot schadelijke server konnen dergelijke escape-sequenties worden gebruikt om uitvoer te verbergen of te wijzigen, bijvoorbeeld via escape-sequenties voor het verplaatsen van de cursor en het wissen van tekst. Ondersteuning voor escape-sequenties voor het kleuren van elementen is behouden.
- Het commando “git checkout -m” bewaart nu automatisch conflicterende lokale wijzigingen in de stash zonder dat de conflicten onmiddellijk hoeven te worden opgelost.
- In het commando “git push” is de mogelijkheid toegevoegd om een tak naar meerdere externe Git-servers met één commando te verplaatsen. Bijvoorbeeld, om de 'main' tak niet alleen naar de hoofserver, maar ook naar mirrors te verzenden, kan een groep "publish" worden gemaakt van servers "github", "gitlab" en "mirror":
git config remotes.publish "github gitlab mirror"
git push publish main - In het commando “git log --graph” is de optie “--graph-lane-limit=” toegevoegd om het aantal verticale banen bij het visualiseren van takken te beperken, zodat er ruimte op het scherm overblijft voor gegevens over commits in repositories met een groot aantal takken.
…
* | | | | 619931f561 Merge branch ‘dl/posix-unused-warning-clang’
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: vereenvoudig de GIT_GNUC_PREREQ() vergelijking
| * | | | ~ ffd45926dc compat/posix.h: ruim de GIT_GNUC_PREREQ() en UNUSED op
|\ \ \ \ \~
| * | | | ~ 3f5203eeb4 ls-files: filter pathspec voordat lstat - De commando's «git log» en «git rev-list» hebben de optie «—max-count-oldest=» gekregen, waarmee je de N oudste commits in het bereik kunt selecteren.
Bron: opennet.ru
