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 tidligere udgave er der i den nye version blevet accepteret 583 ændringer, der er forberedt med deltagelse af 84 udviklere, hvoraf 32 deltager i udviklingen for første gang. :
- Muligheden for delvis kloning nærmer sig stabilisering og fuld færdiggørelse, hvilket giver mulighed for kun at flytte en del af dataene og arbejde med en ufuldstændig kopi af repositoryet. Ved almindelig kloning kopieres alle data fra repositoryet, inklusive hver version af hver fil fra ændringshistorikken. For meget store repositories medfører datakopiering en betydelig stigning i trafik og diskplads, selvom udvikleren kun er interesseret i en undergruppe af filer. For at forenkle opnåelsen af kun en del af arbejdstræet for kildekoderne er der i den nye udgave blevet foreslået en eksperimentel kommando 'sparse-checkout' og en ny mulighed '--sparse' for kloningskommandoen.
Tidligere blev processen med selektiv kloning foretaget ved at specificere for at filtrere unødvendigt indhold og bruge optionen '--no-checkout' til at deaktivere udtræk af manglende filer. Derefter, før checkout-operationen kunne udføres, skulle indstillingen core.sparseCheckout aktiveres, og listen over mønstre for udelukkede stier skulle defineres i filen .git/info/sparse-checkout. For eksempel, for at klone uden blobber og forbyde udtræk af filer fra indlejrede kataloger med dybde 2 eller mere, kunne man udføre:
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 .Den nye kommando 'git sparse-checkout' forenkler arbejdet betydeligt og reducerer processen med at organisere arbejdet med et ufuldstændigt repository til kommandoerne:
git clone --filter=blob:none --sparse /your/repository/here repo
git sparse-checkout set /path/to/check/outSparse-checkout-kommandoen gør det muligt at oprette en liste over stier til checkout (set) uden manuel konfiguration af .git/info/sparse-checkout, samt at vise den nuværende liste over stier (list) og aktivere eller deaktivere delvise checkouts (enable/disable).
For at optimere arbejdet med meget store repositorier og skabelonlister er der foreslået en indstilling ««, der begrænser de tilladte skabeloner (i stedet for vilkårlige skabeloner fra .gitignore kan man angive, hvilke stier og filer i den angivne undermappe, der skal udtrækkes). For eksempel, hvis der i et stort repository er en mappe «A/B/C» og alt arbejde er koncentreret i undermappen «C», vil kommandoen «git sparse-checkout set A/B/C» udtrække indholdet af «C» fuldstændigt, men kun udtrække de nødvendige dele fra «A» og «B» for at arbejde med «C».
- Dokumentationen («git rebase -h») er blevet renset for alle omtaler af indstillingen «—preserve-merges», som er erklæret forældet, og i stedet for skal man bruge ««.
- For at forbedre læsbarheden af beskeder med patches, der sendes til mailinglister, er der tilføjet en indstilling «git format-patch —cover-from-description subject», når denne bruges som emne for følgebrevet til patch-sættet, anvendes første afsnit af tekstbeskrivelsen af grenen.
- Der er implementeret understøttelse af en kombination af «git apply —3way»-kommandoen og indstillingen «merge.conflictStyle» («git apply» tager nu hensyn til konflikten som beskrevet i merge.conflictStyle, når der er behov for at løse konflikten efter forsøget på at anvende en patch-fil til repository'en).
- Koden til funktionsbestemmelse, der bruges i operationer som «git diff/grep —show-function/—function-context», er blevet udvidet til at understøtte grænsedragning af funktioner i programmer på sproget .
- Der er blevet tilføjet en ny mulighed «—pathspec-from-file» til «git add», «git commit», «git reset» og andre kommandoer, hvilket giver mulighed for at indlæse en liste over stier fra en fil eller inddata-strøm i stedet for at liste dem i kommandolinjen.
- Problemet med at bestemme omdøbning på katalogniveau, når der blev skrevet commits, er blevet løst. Bestemmelsen fungerede ikke i tilfælde af, at indholdet af en undermappe blev flyttet til rodmappen af repoet.
- Der er foreslået en grundlæggende implementering af den genarbejdede «git add -i»-kommando, som gør det muligt at tilføje ændret indhold i interaktiv tilstand, omskrevet fra Perl til C. Der er en tilsvarende genbearbejdning af «git add -p»-kommandoen.
- Teamet "git log —graph" er blevet refaktoreret til at danne et ASCII-billede af grafen med ændringshistorikken i repoet. Omstruktureringen har betydeligt forbedret og forenklet output uden at forvrænge historikkens struktur, hvilket for eksempel løste problemet med, at billedet strakte sig ud over terminalens rækkebredde.
- Indstillingen "git log —format=..", der gør det muligt at ændre outputformatet,
er udvidet med understøttelse af flagene "l/L" til kun at vise en del af e-mailadressen, der angives før "@"-symbolet (for eksempel nyttigt, når alle udviklere har e-mails i domænet). - Der er tilføjet en underkommando "set-url" til kommandoen "git submodule".
- Test-sæt er blevet opdateret i forbindelse med forberedelsen til overgangen til
SHA-2 hash-algoritmen i stedet for SHA-1.
Kilde: opennet.ru
