Git 2.55

Geïntroduceerd de release van het gedistribueerde systeem voor versiebeheer van broncode Git 2.55. Onder de belangrijkste wijzigingen: standaard inschakeling van compilatie met Rust, implementatie van fsmonitor-proces voor Linux, nieuwe strategie voor herverpakking van de incrementele MIDX-index, git history fixup-commando voor het corrigeren van commits, optimalisatie van de generatie van bitmaps voor objectbeschikbaarheid, ondersteuning voor gelijktijdige uitvoering van hooks, git format-rev-commando. De Git-code wordt verspreid is gelicentieerd onder GPLv2+.

Vergeleken met de vorige release zijn er 505 wijzigingen in de nieuwe versie opgenomen, voorbereid met de deelname van 100 ontwikkelaars, van wie 33 voor het eerst bij de ontwikkeling van Git betrokken waren.

Belangrijkste vernieuwingen (github.blog, gitlab.com/blog, gitlab.com/git-scm):

  • Standaard is ingeschakeld ondersteuning voor componenten geschreven in Rust. De rustc-compiler is toegevoegd is toegevoegd aan de bouwafhankelijkheden. Voor een build zonder Rust kan de NO_RUST=1 vlag worden gebruikt bij het uitvoeren van de make-tool of -Drust=disabled bij het uitvoeren van meson configure. De mogelijkheid om de build met Rust uit te schakelen zal tot Git 3.0 worden ondersteund, waarin Rust zal zijn ingeschakeld onderdeel van de verplichte afhankelijkheden. In Rust is een laag geïmplementeerd voor de overdraagbaarheid tussen configuraties met SHA-1 en SHA-256 hashes, evenals enkele interne functies zoals het coderen en decoderen van variabele lange gehele waarden. In de toekomst wordt verwacht dat een aanzienlijke herziening van interne componenten van Git in Rust zal plaatsvinden.
  • Aan het experimentele team "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 stelt in staat om wijzigingen die via git add zijn toegevoegd naar een eerdere commit te verplaatsen en automatisch alle daaropvolgende commits opnieuw te schrijven, vergelijkbaar met het uitvoeren van git commit —fixup= en het starten van git rebase —autosquash ~.
  • Voor het Linux-platform is een achtergrondproces geïmplementeerd fsmonitor, dat wijzigingen in het bestandssysteem volgt met behulp van het mechanisme inotify en het mogelijk maakt om zonder doorzoeking van de gehele werkdirectory git status en vergelijkbare commando's uit te voeren. De inschakeling gebeurt via de instelling “core.fsmonitor».
  • De git repack-commando heeft de modus —write-midx=incremental gekregen, die een nieuwe strategie voor het bijwerken van metadata in de incrementele MIDX-index (multi-pack index) implementeert, waardoor volledige herverpakking van de index niet nodig is. In de incrementele multi-pack index wordt in plaats van één grote index, die informatie bevat over de verdeling van objecten over pack-bestanden, een scheiding in lagen toegepast — elke laag omvat 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 toe te voegen zonder de reeds bestaande lagen opnieuw op te bouwen. Het git repack —write-midx=incremental-commando stelt je in staat om een nieuwe laag toe te voegen aan de incrementele MIDX-index, die recent aangemaakte pack-bestanden omvat. In combinatie met de repository-packing modus —geometric biedt het nieuwe commando de mogelijkheid om nieuwe objecten uit meerdere pack-bestanden te combineren in één groter pack-bestand en indien nodig de compressie en samenvoeging van verschillende 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 de oude grote lagen onaangetast blijven, en voorkomt ongecontroleerde groei van de laagschakel, waarbij het totale aantal lagen op een niveau blijft dat evenredig is aan de logaritme van het totale aantal objecten.
  • De generatie van beschikbaarheidsbitmapen van objecten is aanzienlijk geoptimaliseerd dankzij een nieuw algoritme voor het doorlopen van de objectboom, dat onnodige recursie uitsluit, de posities van objecten cachet, de bitmapen sorteert voordat ze worden samengevoegd met de XOR-operatie en de code is herzien voor het maken van pseudo-samenvoeging bitmaps (pseudo-merge). In de testrepository hebben de optimalisaties het generatieproces van de bitmapen verminderd van 612 naar 294 seconden.
  • De mogelijkheid van parallelle uitvoering van onafhankelijke hooks in de configuratiebestanden. Hooks die invloed hebben op de gedeelde status of deze in overweging nemen, zoals het wijzigen van opmerkingen in commits of het inspecteren van indexen en de werkomgeving, kunnen niet gelijktijdig worden uitgevoerd. Hooks voor linting en unit-tests kunnen echter gelijktijdig worden uitgevoerd. Hooks die gelijktijdige uitvoering toestaan, worden ingesteld via de parameter hook.hooknaam.parallel = true. Het aantal gelijktijdige taken wordt bepaald via de instelling hook.jobs, hook.<event>.jobs of de opdrachtregeloptie -j.
  • In het git pack-objects-commando is de mogelijkheid om filters op te geven, zoals blob:none, blob:limit=<n>, tree:0, object:type=<type>, sparse:<oid> en combine:. In een test resulteerde de afwijzing van blobs bij het uitvoeren van —path-walk in een vermindering van 16% van de grootte van het gegenereerde pack-bestand.
  • De git format-rev-commando is toegevoegd voor het formatteren van revisies en objectnamen die worden vermeld in commitlijsten of voorkomen in willekeurige tekst (bijvoorbeeld kan het worden gebruikt in hooks voor het verwerken van opmerkingen in commits).

git last-modified | git format-rev —stdin-mode=text —format=%an

Junio C Hamano builtin/commit.c

  • Standaard is de escaper van de meeste controle-sequenties in informatieve berichten en foutteksten die door de server worden verzonden, ingeschakeld. Bij het benaderen van een kwaadaardige server konden dergelijke escape-sequenties worden gebruikt om uitvoer te verbergen of te wijzigen, bijvoorbeeld door escape-sequenties voor het verplaatsen van de cursor en het wissen van tekst. Ondersteuning voor escape-sequenties om elementen te markeren in kleur is behouden.
  • Het git checkout -m-commando slaat nu automatisch conflicterende lokale wijzigingen op in de stash zonder dat het dringend noodzakelijk is om het conflict onmiddellijk op te lossen.
  • Het git push-commando heeft de mogelijkheid gekregen om een branch naar meerdere externe Git-servers met één commando te verzenden. Bijvoorbeeld, om de main-branch niet alleen naar de hoofdserver, maar ook naar mirrors te verzenden, kan een publicatiegroep van servers github, gitlab en mirror worden aangemaakt:

git config remotes.publish "github gitlab mirror"
git push publish main

  • In het git log —graph-commando is de optie —graph-lane-limit=<N> toegevoegd om het aantal verticale lijnen bij de visualisatie van branches te beperken, zodat er ruimte op het scherm overblijft voor gegevens over de commits in repositories met een groot aantal branches.

…
* | | | | 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

  • Aan de git log en git rev-list commando's is de optie —max-count-oldest= toegevoegd, waarmee de N oudste commits in het bereik kunnen worden geselecteerd.

Bron: linux.org.ru

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