udgivelse af et distribueret system til administration af kildekoder . Git er et af de mest populære, pålidelige og højtydende versionsstyringssystemer, der tilbyder fleksible værktøjer til ikke-lineær udvikling baseret på forgrening og sammenlægning af grene. For at sikre integriteten af historikken og modstandsdygtighed mod 'tilbageskuende' ændringer anvendes implicit hashing af hele den tidligere historie i hver commit; det er også muligt at verificere med digitale signaturer fra udviklerne af individuelle tags og commits.
Sammenlignet med den forrige version er der i den nye version indført 544 ændringer, udført med deltagelse af 78 udviklere, hvoraf 21 deltager i udviklingen for første gang. :
- Der er tilføjet støtte til konfigurationsmakroer, som giver mulighed for hurtigt at skifte mellem forskellige sæt af indstillinger uden at dykke ned i de specifikke muligheder, der er knyttet til dem. Med makroer er der ikke behov for at huske, hvilke indstillinger der skal ændres for at aktivere en bestemt funktionalitet. For eksempel kan det være nødvendigt at skifte til den nye indekseringsmekanisme, aktivere komprimering af stinavne og aktivere cache til ikke-sporede filer ved at indstille parameteren index.version til 4 og aktivere core.untrackedCache, når arbejdet med et stort repository bremses. Makroer sparer tid på at søge efter den nødvendige løsning i dokumentationen og aktiverer straks indstillinger med optimeringer til repositories med et stort antal filer:
git config feature.manyFiles true
- Opbevaring af objekter i form af en commit-graf (commit-graph) er nu som standard aktiveret, hvor indekseringen anvender en grafstruktur i stedet for en lineær liste af objekt-hash-værdier med henvisninger til andre objekter. Tidligere krævede det at downloade hvert objekt fra disken for at finde henvisninger for at bestemme de udgivelser, der indeholdt en bestemt rettelse, men med opbevaring i grafform kan alle nødvendige forbindelser straks bestemmes. Overgangen til opbevaring i form af commit-grafer i Linux-kernens og Git-repositories har resulteret i en næsten fordobling af ydelsen ved operationer med grene. For at aktivere den nye opbevaringsmetode efter opgradering til Git 2.24, skal du køre kommandoen «git gc».
Ændringerne relateret til commit-graph indebærer også en ensartet implementering af fremdriftsindikatoren for operationer i forbindelse med commit-graph kommandoer ("git commit-graph write", "git commit-graph verify" osv.). Fremdriftsindikatoren vises nu som standard kun i terminalen (for at ændre adfærden skal indstillingen "-[no-]progress" bruges). Der er desuden tilføjet en ny konfigurationsparameter fetch.writeCommitGraph, der muliggør automatisk opdatering af commit-graph filen under "git fetch" operationer (alle commits hentet fra eksterne repositories vil straks blive inkluderet i commit-graph uden behov for et separat auto-gc opkald);
- Der er tilføjet en kommando til at omskrive ændringshistorik — "" som er et enklere alternativ til kommandoen "" til at udføre operationer med ændringshistorikken i et repository (f.eks. slette en fil fra repositoryet eller udtrække ændringshistorikken for en given mappe). For at forbedre effektiviteten udføres operationerne i "git filter-repo" over en kontinuerlig strøm af historik i stedet for en ordnet commit-baseret gennemgang.
Filtrering af historik sker ved hjælp af indstillingen "-path-{glob,regex}", som tillader både enkle maskeord og regulære udtryk. Der findes også indstillinger til at udføre operationer som "søg og erstat" eller rense binære objekter, hvis størrelse overstiger en angivet grænse. Hver omskrevet commit tildeles en ny SHA-1 hash-identifikator, og alle links til den erstattede commit opdateres i overensstemmelse med den nye identifikator.
Der er en mulighed for at vise en oversigt med statistik om repositoryet (antal objekter fordelt efter typer, de største filer og mapper, hvilken filtyper der kræver mest plads på disken osv.) via indstillingen "-analyze". For at udvide funktionaliteten kan der tilføjes brugerdefinerede callback-handlere skrevet i Python, hvorigennem man kan både oprette nye underkommandoer og håndtere forskellige begivenheder (f.eks. nye filtyper);
- Der tilføjet mulighed „—end-of-options“, som gør det muligt at adskille muligheder fra navnene på referencer, der kan starte med tegnet „-“, og opfattes som muligheder („git log —end-of-options —super-dangerous-option“). Hvis sådanne navne i praksis kan undslippes som „git log ‘refs/heads/—super-dangerous-option'“, kunne der i scripts være opstået problemer med bestemmelse af navnerummet. Den almindeligt anvendte separator „—“ er i dette tilfælde ikke anvendelig, da den allerede bruges til at adskille navne på referencer fra filer (f.eks. „git log —end-of-options —super-dangerous-option ^master — path/to/file“);
- I „git rebase —rebase-merges“ er der tilføjet mulighederne „—strategy“ og „—strategy-option“ til valg af ;
- En ny håndteringsfunktion „.git/hooks/pre-merge-commit“ er blevet tilføjet, som udføres efter merger, men før det resulterende commit skrives;
- Kommandoudfyldningsmotoren har fået støtte til at tilføje konfigurationsvariable knyttet til specifikke kommandoinstillinger.
For eksempel, når man skal indtaste „git -c core.autocrlf=false add path/to/my/file“, men ikke husker det præcise navn på variablen „core.autocrlf“, kan man trykke på Tab for at få en hint.
Desuden udvikler Git adfærdskodeks for deltagere i projektet, der definerer de grundlæggende principper for konfliktløsning. Dokumentet er baseret på anbefalingerne fra „», der anvendes i mange åbne projekter, inklusive Linux-kernen, Eclipse, Freedesktop, GitLab, Ruby og Kubernetes. Dokumentet definerer lige muligheder for alle deltagere, uanset deres overbevisning, alder, køn, religiøse præferencer, uddannelsesniveau, sociale status og nationalitet. I samfundet fremmes en venlig kommunikationsform, forståelse, empati for andre deltageres problemer, modtagelse af konstruktiv kritik samt vedtagelse af de bedste løsninger for hele samfundet. Trolling, krænkende kommunikation, forsøg på nedgørelse, chikane, overtrædelse af privatlivets fred, offentliggørelse af personlige oplysninger samt andre handlinger, der kan anses for upassende i professionel kommunikation, er ikke tilladt.
Kilde: opennet.ru
