lancering van het gedistribueerde bronbeheersysteem . Git is een van de populairste, meest betrouwbare en hoogpresterende versiesysteem, dat flexibele middelen voor niet-lineaire ontwikkeling biedt, gebaseerd op het takken en samenvoegen van vertakkingen. Voor het waarborgen van de integriteit van de geschiedenis en de weerstand tegen 'retroactieve' wijzigingen, wordt impliciete hashing van de gehele eerdere geschiedenis in elke commit gebruikt, waarbij ook digitale handtekeningen van ontwikkelaars voor bepaalde tags en commits mogelijk zijn.
In vergelijking met de vorige release zijn er in deze nieuwe versie 504 wijzigingen doorgevoerd, voorbereid met de hulp van 64 ontwikkelaars, van wie 12 voor het eerst deelnamen aan de ontwikkeling. :
- De standaardovergang is gemaakt naar van het communicatieprotocol Git, dat wordt gebruikt voor de externe verbinding van de client met de Git-server. De tweede versie van het protocol is opmerkelijk omdat het de mogelijkheid biedt om takken en tags aan de serverzijde te filteren, met de terugkeer van een verkorte lijst van verwijzingen naar de client. Eerder kreeg de client bij elke uit te voeren fetch-commando altijd de volledige lijst van verwijzingen over het hele repository, zelfs wanneer de client alleen één tak bijwerkte of de actualiteit van zijn kopie van het repository controleerde. Een andere opmerkelijke vernieuwing is de mogelijkheid om nieuwe mogelijkheden aan het protocol toe te voegen naarmate er nieuwe functionaliteit in de toolbox verschijnt. De clientcode blijft compatibel met het oude protocol en kan blijven werken met zowel nieuwe als oude servers, waarbij automatisch wordt teruggevallen op de eerste versie als de server de tweede niet ondersteunt.
- De 'git config'-opdracht heeft de optie '--show-scope' toegevoegd, die het gemakkelijker maakt om te identificeren waar bepaalde instellingen zijn gedefinieerd. Git stelt je in staat om instellingen op verschillende plaatsen te definiëren: in het repository (.git/info/config), in de gebruikersmap (~/.gitconfig), in het systeemconfiguratiebestand (/etc/gitconfig), en via opdrachtregelopties en omgevingsvariabelen. Het is vrij moeilijk om te begrijpen waar precies de gewenste instelling is gedefinieerd bij het uitvoeren van 'git config'. Voor deze taak was er eerder de optie '--show-origin' beschikbaar, maar deze toont alleen het pad naar het bestand waarin de instelling is gedefinieerd, wat nuttig is als het de bedoeling is om het bestand te bewerken, maar niet helpt als het nodig is om de waarde te wijzigen via 'git config' met behulp van de opties '--system', '--global' of '--local'. De nieuwe optie '--show-scope' toont de context van de definitie van de variabelen en kan samen met '--show-origin' worden gebruikt:
$ git --list --show-scope --show-origin
global file:/home/user/.gitconfig diff.interhunkcontext=1
global file:/home/user/.gitconfig push.default=current
[…]
local file:.git/config branch.master.remote=origin
local file:.git/config branch.master.merge=refs/heads/master$ git config --show-scope --get-regexp ‘diff.*’
global diff.statgraphwidth 35
local diff.colormoved plain$ git config --global --unset diff.statgraphwidth
- In de binding instellings Het gebruik van wildcard maskers in URL's is toegestaan. Alle HTTP-instellingen en Git-credentials kunnen worden ingesteld voor zowel alle verbindingen (http.extraHeader, credential.helper) als voor verbindingen die aan een specifieke URL zijn gekoppeld (credential.https://example.com.helper, credential.https://example.com.helper). Tot nu toe waren wildcard maskers, zoals *.example.com, alleen toegestaan voor HTTP-instellingen, maar niet ondersteund voor credential binding. In Git 2.26 zijn deze verschillen weggenomen en kan bijvoorbeeld de gebruikersnaam aan alle subdomeinen worden gekoppeld:
[credential «https://*.example.com»]
username = ttaylorr
- De experimentele ondersteuning voor gedeeltelijke kloning (partial clones) is uitgebreid, waarmee alleen een deel van de gegevens kan worden overgebracht en gewerkt kan worden met een onvolledige kopie van de repository. In deze uitgave is er een nieuw commando 'git sparse-checkout add' toegevoegd, waarmee afzonderlijke mappen kunnen worden toegevoegd voor het toepassen van de 'checkout' operatie, in plaats van alle vergelijkbare mappen tegelijkertijd op te sommen via het 'git sparse-checkout set' commando (mappen kunnen één voor één worden toegevoegd, zonder elke keer de hele lijst opnieuw in te voeren).
Bijvoorbeeld, om de repository git/git te klonen zonder blobs door te geven, met beperking van de controle tot alleen de hoofdmap van de werkmap en afzonderlijke markering voor het extraheren van de mappen 't' en 'Documentation', kan het volgende worden opgegeven:$ git clone --filter=blob:none --sparse git@github.com:git/git.git
$ cd git
$ git sparse-checkout init --cone$ git sparse-checkout add t
….
$ git sparse-checkout add Documentation
….
$ git sparse-checkout list
Documentation
t - De prestaties van het commando 'git grep', dat wordt gebruikt voor het zoeken in zowel de actuele inhoud van de repository als in historische revisies, zijn aanzienlijk verbeterd. Voor snellere zoekopdrachten was het mogelijk de inhoud van de werkmap te scannen met behulp van meerdere threads ('git grep --threads'), maar de zoekopdracht in historische revisies was enkelvoudig. Dit beperking is nu opgeheven door de mogelijkheid om leesoperaties uit het objectopslag voor meerdere threads uit te voeren. Standaard is het aantal threads ingesteld op het aantal CPU-kernen, wat in de meeste gevallen nu geen expliciete instelling van de optie '--threads' vereist.
- Ondersteuning voor autocompletion van subcommando's, paden, links en andere argumenten van het 'git worktree'-commando is toegevoegd, waardoor gewerkt kan worden met meerdere werkkopieën van de repository.
- Ondersteuning voor heldere kleuren is toegevoegd, waarvoor ANSI escape-sequenties beschikbaar zijn. Bijvoorbeeld, in de kleurinstellingen voor syntax highlighting "git config --color" of "git diff --color-moved" kan voor helderblauw de optie "%C(brightblue)" worden ingesteld.
- Een nieuwe versie van het script is toegevoegd , dat integratie met het systeem mogelijk maakt om het volgen van bestandswijzigingen en nieuwe bestanden te versnellen. Na de update van git is het vereist hook in de repository.
- Er zijn optimalisaties toegevoegd om de bewerkingen voor gedeeltelijke klonen (partial clones) te versnellen, gerelateerd aan het gebruik van bitmapmechanismen
(bitmap machinery) om volledige doorloop van alle objecten tijdens het filteren van de output te vermijden. De controle op blobs (—filter=blob:none en —filter=blob:limit=n) tijdens gedeeltelijk klonen vindt nu
aanzienlijk sneller plaats. GitHub heeft aangekondigd de patches met deze optimalisaties en experimentele ondersteuning voor gedeeltelijk klonen toe te passen. - De opdracht "git rebase" is overgezet naar een andere backend, die standaard het ‘merge’-mechanisme gebruikt (voorheen gebruikt voor "rebase -i") in plaats van ‘patch+apply’. In enkele details verschillen de backends, bijvoorbeeld, na het voortzetten van de operatie na conflictbeheersing (git rebase --continue) biedt de nieuwe backend aan om het commitbericht te bewerken, terwijl de oude eenvoudig het oude bericht gebruikte. Om het oude gedrag te herstellen, kan de optie "--apply" worden gebruikt of kan de configuratievariabele ‘rebase.backend’ worden ingesteld op ‘apply’.
- Een voorbeeld van een verwerker voor authenticatieparameters, ingesteld via .netrc, is herzien voor gebruiksgemak.
- De instelling gpg.minTrustLevel is toegevoegd om het minimale vertrouwensniveau in te stellen voor verschillende elementen die digitale handtekeningen controleren.
- Er is een optie "--pathspec-from-file" toegevoegd aan "git rm" en "git stash".
- De verbetering van testsets is voortgezet ter voorbereiding op de overgang naar de SHA-2 hash-algoritme in plaats van SHA-1.
Bron: opennet.ru
