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 583 wijzigingen in de nieuwe versie aangebracht, voorbereidt door 84 ontwikkelaars, van wie 32 voor het eerst hebben deelgenomen aan de ontwikkeling. :
- De functionaliteit van gedeeltelijk klonen (partial clones), waarmee alleen een deel van de gegevens kan worden overgezet en met een onvolledige kopie van de repository kan worden gewerkt, nadert stabilisatie en volledige gereedheid. Bij gewoon klonen worden alle gegevens van de repository gekopieerd, inclusief elke versie van elk bestand uit de wijzigingsgeschiedenis. Voor zeer grote repositories kan het kopiëren van gegevens leiden tot een aanzienlijke toename van het verkeer en de schijfruimte, zelfs als de ontwikkelaar alleen geïnteresseerd is in een subset van bestanden. Om het verkrijgen van slechts een deel van de werkboom van de bronbestanden te vereenvoudigen, is in deze nieuwe release een experimentele opdracht "sparse-checkout" en een nieuwe optie "—sparse" voor de opdracht "clone" aangeboden.
Eerder werd het proces van selectief klonen uitgevoerd door het instellen om overbodige inhoud te filteren en de optie "—no-checkout" om het aanvullen van ontbrekende bestanden uit te schakelen. Daarna, voordat de checkout-operatie werd uitgevoerd, moest de instelling core.sparseCheckout worden ingeschakeld en moest in het bestand .git/info/sparse-checkout een lijst van uitgesloten paden worden gedefinieerd. Bijvoorbeeld, om te klonen zonder blobs en om het extraheren van bestanden uit geneste mappen die dieper zijn dan 2 te verbieden, kon het volgende worden uitgevoerd:
git clone —filter=blob:none —no-checkout /your/repository/here repo
$ cd repo
$ cat >.git/info/sparse-checkout <EOF
/*
!/*
EOF
$ git config core.sparseCheckout 1
$ git checkout .De nieuwe opdracht "git sparse-checkout" vereenvoudigt het werk aanzienlijk en reduceert het proces van werken met een onvolledige repository tot de volgende opdrachten:
git clone —filter=blob:none —sparse /your/repository/here repo
git sparse-checkout set /path/to/check/outDe sparse-checkout-opdracht maakt het mogelijk om een lijst van paden voor checkout (set) in te stellen zonder handmatig .git/info/sparse-checkout in te stellen, evenals het huidige padlijst (list) weer te geven en gedeeltelijke checkouts (enable/disable) in of uit te schakelen.
Om het werken met zeer grote repositories en lijsten van sjablonen te optimaliseren, is de instelling "«, wat de toegestane sjablonen beperkt (in plaats van willekeurige .gitignore-sjablonen kan worden opgegeven welke paden en bestanden binnen een opgegeven submap moeten worden opgehaald). Bijvoorbeeld, als er in een grote repository een map 'A/B/C' is en al het werk zich in de submap 'C' concentreert, dan zal het inschakelen van de sparseCheckoutCone-modus de opdracht 'git sparse-checkout set A/B/C' de inhoud van 'C' volledig ophalen, maar uit 'A' en 'B' alleen de delen die nodig zijn om met 'C' te werken.
- Uit de documentatie ('git rebase -h') zijn alle verwijzingen naar de optie '--preserve-merges' verwijderd, die als verouderd is verklaard en in plaats daarvan moet voor het verplaatsen van een set commits '«.
- Om de leesbaarheid van berichten met patches die naar mailinglijsten worden verzonden te verbeteren, is de optie 'git format-patch --cover-from-description subject' toegevoegd, waarbij de eerste alinea uit de beschrijving van de branch als onderwerp van de begeleidende e-mail voor de set patches wordt gebruikt.
- Ondersteuning voor het samen gebruiken van de opdracht 'git apply --3way' en de instelling 'merge.conflictStyle' is geïmplementeerd ('git apply' houdt nu rekening met de beschrijvingsstijl van conflicten uit merge.conflictStyle indien nodig na een pogingen om een patchbestand toe te passen op de repository).
- De functieherkenningscode, gebruikt in operaties zoals 'git diff/grep --show-function/--function-context', is uitgebreid met ondersteuning voor het bepalen van de grenzen van functies in programma's geschreven in de taal .
- In 'git add', 'git commit', 'git reset' en andere opdrachten is een nieuwe optie '--pathspec-from-file' toegevoegd, waarmee een lijst van paden vanuit een bestand of een invoerbron kan worden geladen, in plaats van ze in de opdrachtregel op te sommen.
- Een probleem met het detecteren van hernoemingen op het niveau van mappen bij het schrijven van commits is opgelost. De detectie werkte niet in het geval van het verplaatsen van inhoud van een submap naar de hoofdmap van de repository.
- Een initiële implementatie van de herwerkte 'git add -i'-opdracht is voorgesteld, die het toevoegen van gewijzigde inhoud in interactieve modus mogelijk maakt, herschreven van Perl naar C. Een soortgelijke herwerking van de opdracht 'git add -p' is aan de gang.
- De 'git log --graph'-opdracht, die een ASCII-weergave van de geschiedenis van wijzigingen in de repository genereert, is herzien. De herwerking heeft het mogelijk gemaakt om de uitvoer aanzienlijk te verbeteren en te vereenvoudigen zonder de structuur van de geschiedenis te verstoren, waardoor bijvoorbeeld het probleem van het overschrijden van de breedte van de terminalregels is opgelost.
- De optie «git log —format=..» biedt de mogelijkheid om het uitvoerformaat te wijzigen.
De ondersteuning voor de vlaggen «l/L» is uitgebreid om alleen het gedeelte van het e-mailadres weer te geven dat voor het «@»-symbool ligt (bijvoorbeeld nuttig wanneer alle ontwikkelaars e-mailadressen in hetzelfde domein hebben). - De subopdracht «set-url» is toegevoegd aan de opdracht «git submodule».
- De testcase is bijgewerkt in voorbereiding op de overstap naar
de hashing-algoritme SHA-2 in plaats van SHA-1.
Bron: opennet.ru
