Efter to måneders udvikling er version 2.45 af den distribuerede kildekodestyringssystem Git udgivet. 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 sammensmeltning af grene. For at sikre integriteten af historikken og modstandsdygtighed over for ændringer «bagud» anvendes implicit hashing af hele den tidligere historie i hver commit, og det er også muligt at verificere digitale signaturer fra udviklere for individuelle tags og commits. Koden til Git distribueres under GPLv2+ licensen.
Sammenlignet med den tidligere version er der blevet accepteret 540 ændringer i denne nye version, forberedt med deltagelse af 96 udviklere, hvoraf 35 deltager i udviklingen for første gang. De vigtigste nyheder er:
- Præliminært er backend'en «reftable» blevet tilføjet for effektiv opbevaring af links til grene og tags i repository. Den nye backend bruger bloklager, der anvendes af JGit-projektet og er optimeret til at opbevare et meget stort antal links (de traditionelle opbevaringsformater for links medfører betydelige omkostninger i repositories med et stort antal links på grund af placeringen af et meget stort antal filer i én mappe, hvis links opbevares i mappen $GIT_DIR/refs, eller behovet for at skrive over én stor fil ved hver opdatering, hvis links opbevares i filen $GIT_DIR/packed_refs). Den nye backend aktiveres ved at angive indstillingen «—ref-format=reftable» under initialisering af repository («git init —ref-format=reftable /path/to/repo») og gør det muligt at accelerere søgning, læsning og skrivning i repositories med et stort antal links.
- Der er blevet leveret værktøjer til at sikre bærbarhed mellem objektidentifikatorer baseret på SHA-1 og SHA-256 hashes. For at muliggøre arbejde med både SHA-1 og SHA-256 hashes i én repository under en gradvis migrering til SHA-256 hashes er der foreslået et nyt objektformat «compatibility», der tillader reference til objekter ikke kun ved hjælp af den primære hash angivet under initialisering af repository, men også ved hjælp af en sekundær hash. For eksempel, når du initialiserer en repository, kan du vælge SHA-256 formatet og definere SHA-1 hash som sekundær: git init —object-format=sha256 /path/to/repo cd /path/to/repo git config extensions.compatObjectFormat sha1
- I kommandoen «git rev-list» er der tilføjet en mulighed for at vise objekternes ID'er, der ikke findes i det lokale repository, selvom de er utilgængelige i en gren eller et tag, hvilket kan bruges til at diagnosticere skade på repository'et: git rev-list —missing=print —all | grep ‘^?’ ?70678e7afeacdcba1242793c3d3d28916a2fd152
- Der er tilføjet en ny kommando «git reflog list» til at vise kendte reflogs og de tilsvarende referencer til tags og grene.
- Der er givet mulighed for at definere alternative præfikser til output af «git diff», der vises før filstien og angiver tilstandene før og efter en bestemt version af filen (standardpræfikserne er «a/» og «b/»). Nye parametre diff.srcPrefix og diff.dstPrefix er tilføjet til konfigurationen for at angive egne præfikser.
- Der er tilføjet en parameter core.commentString til at definere en separator, der vil blive brugt i stedet for symbolet «#» til at ignorere kommentarer i commit-beskeden. Den tidligere tilgængelige indstilling core.commentChar er tilpasset til at understøtte multibyte-tegn som kommentarseparator (tidligere blev kun ASCII-tegn understøttet).
- Der er tilføjet en mulighed «—comment» i kommandoen «git config», der muliggør at gemme kommentarer i .gitconfig-filen for at forklare formålet med de forskellige indstillinger. git config —comment ‘to show the merge base’ merge.conflictStyle diff3 tail -n 2 .git/config [merge] conflictStyle = diff3 # for at vise merge-basen
- Der er tilføjet en option «—empty» i kommandoen «git cherry-pick» til automatisk at fjerne overflødige commits, svarende til optionen «—empty» i git-rebase og git-am.
- I kommandoen «git checkout -p» er det tilladt at bruge symbolet «@» som synonym for navnet «HEAD».
Kilde: opennet.ru
