Na drie maanden ontwikkeling is de uitgave van het gedistribueerde bronbeheersysteem Git 2.36 gepubliceerd. Git is een van de populairste, meest betrouwbare en hoogperformante versiebeheersystemen, die flexibele hulpmiddelen voor niet-lineaire ontwikkeling biedt, gebaseerd op takken en samenvoegen. Voor het waarborgen van de integriteit van de geschiedenis en de weerstand tegen 'backdating' worden impliciete hashes van de volledige vorige geschiedenis in elke commit gebruikt, en het is ook mogelijk om digitale handtekeningen van ontwikkelaars toe te voegen aan afzonderlijke tags en commits.
In vergelijking met de vorige uitgave zijn er 717 wijzigingen aangebracht in de nieuwe versie, voorbereid met de hulp van 96 ontwikkelaars, van wie 26 voor het eerst hebben deelgenomen aan de ontwikkeling. De belangrijkste vernieuwingen zijn:
- Aan de commando's 'git log' en 'git show' is de optie '--remerge-diff' toegevoegd, waarmee de verschillen tussen het gezamenlijke resultaat van samenvoegen en de werkelijke gegevens in de commit na het uitvoeren van het commando 'merge' kunnen worden getoond. Dit maakt het mogelijk om de wijzigingen die zijn aangebracht als gevolg van het oplossen van conflicten bij het samenvoegen, visueel te beoordelen. Het gewone commando 'git show' scheidt verschillende conflictoplossingen door inspringing, wat het moeilijk maakt om de wijzigingen te begrijpen. Bijvoorbeeld, op de screenshot hieronder toont de regel '+/-' zonder inspringing de laatste conflictoplossing met betrekking tot de herbenaming in de eerste tak van sha1 naar oid in de opmerking, terwijl '+/-' met inspringing de oorspronkelijke conflictoplossing toont, veroorzaakt door een extra argument in de functie dwim_ref() in de tweede tak.

Bij het gebruik van de optie '--remerge-diff' worden de verschillen tussen de conflictoplossingen niet gescheiden voor elke ouderlijke tak, maar worden de algemene verschillen tussen het bestand met samenvoegconflicten en het bestand waarin de conflicten zijn opgelost getoond.

- De flexibiliteit van het instellen van het gedrag voor het resetten van schijfcaches via de aanroep van de functie fsync() is verhoogd. De eerder beschikbare parameter core.fsyncObjectFiles is opgesplitst in twee configuratievariabelen core.fsync en core.fsyncMethod, die de mogelijkheid bieden om fsync toe te passen, niet alleen op objectbestanden (.git/objects), maar ook op andere Git-structuren, zoals verwijzingen (.git/refs), reflog en pack-bestanden.
Met de variabele core.fsync kan een lijst van interne Git-structuren worden opgegeven waarvoor fsync na een schrijfoperatie extra zal worden aangeroepen. De variabele core.fsyncMethod maakt het mogelijk om de methode voor het leegmaken van de cache te kiezen; zo kan fsync worden geselecteerd voor het toepassen van de gelijknamige systeemaanroep of kan writeout-only worden opgegeven voor uitgestelde schrijfoperaties (pagecache writeback).
- Om te beschermen tegen kwetsbaarheden die door andere gebruikers manipulatie uitvoeren met .git-mappen op gedeelde schijven, is de controle op de eigenaar van de repository versterkt. Het uitvoeren van Git-commando's is nu alleen toegestaan binnen je eigen '.git'-mappen. Als de map met de repository aan een andere gebruiker toebehoort, wordt er standaard een foutmelding weergegeven. Dit gedrag kan worden uitgeschakeld met de instelling safe.directory.
- Aan het commando 'git cat-file', dat is bedoeld om de oorspronkelijke inhoud van Git-objecten weer te geven, is de optie '--batch-command' toegevoegd. Deze aanvulling op de eerder beschikbare commando's '--batch' en '--batch-check' maakt het mogelijk om het type uitvoer adaptief te kiezen via 'contents
- Aan het commando 'git ls-tree', dat bedoeld is om een lijst van de inhoud van objectbomen te genereren, is de optie '--oid-only' ('--object-only') toegevoegd, vergelijkbaar met '--name-only', die alleen objectidentificaties weergeeft voor een vereenvoudigde aanroep vanuit scripts. Daarnaast is de optie '--format' geïmplementeerd, waarmee je je eigen uitvoerformaat kunt definiëren door informatie over de modus, het type, de naam en de grootte te combineren.
- In het commando 'git bisect run' is de mogelijkheid toegevoegd om niet-ondersteuning voor scripts met een uitvoerbare bestandskenmerk te bepalen, en in dat geval worden fouten met de codes 126 of 127 weergegeven (eerder, als een script niet kon worden uitgevoerd, werden alle revisies gemarkeerd als problematisch).
- Aan het commando 'git fetch' is de optie '--refetch' toegevoegd voor het ophalen van alle objecten zonder de andere partij te informeren over inhoud die al op het lokale systeem aanwezig is. Dit gedrag kan nuttig zijn voor het herstellen van de status na storingen, wanneer er geen zekerheid is over de integriteit van lokale gegevens.
- De commando's «git update-index», «git checkout-index», «git read-tree» en «git clean» hebben ondersteuning gekregen voor gedeeltelijke indexen (sparse index), waarmee de prestaties worden verbeterd en ruimte in de repositories wordt bespaard bij operaties voor gedeeltelijke kloning (sparse-checkout).
- Het gedrag van het commando «git clone —filter=… —recurse-submodules» is gewijzigd, waardoor nu gedeeltelijke kloning van submodules plaatsvindt (voorheen werd de filter alleen toegepast op de hoofdinhoud, terwijl submodules volledig werden gekloond zonder rekening te houden met de filter).
- In de commandoregel «git bundle» is ondersteuning toegevoegd voor het opgeven van filters om inhoud selectief op te slaan, vergelijkbaar met operaties voor gedeeltelijke kloning.
- Aan het commando «git branch» is de optie «—recurse-submodules» toegevoegd voor recursieve doorloop van submodules.
- In userdiff is een nieuwe handler voorgesteld voor de programmeertaal Kotlin.
Bron: opennet.ru


