Den nyeste version af det distribuerede system til håndtering af kildekoder, Git 2.37, er blevet præsenteret. 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å grene og fusionering. For at sikre integriteten af historikken og modstandsdygtigheden over for tilbagevirkende ændringer anvendes implicit hashing af hele den tidligere historik i hver commit, og det er også muligt at bekræfte digitale signaturer fra udviklerne af enkelt tags og commits.
Sammenlignet med den forrige version er der i den nye version accepteret 395 ændringer, der er blevet forberedt med deltagelse af 75 udviklere, hvoraf 20 deltager i udviklingen for første gang. De vigtigste nyheder:
- Mekanismen for sparsomme indekser (sparse index) er klar til almindelig brug, og dækker kun en del af repositoryet. Sparsomme indekser gør det muligt at forbedre ydeevnen og spare plads i repositories, hvor der udføres delvise kloningsoperationer (sparse-checkout) eller arbejdes med en ufuldstændig kopi af repositoryet. I den nyeste version er arbejdet med integrationen af sparsomme indekser i kommandoerne 'git show', 'git sparse-checkout' og 'git stash' afsluttet. Det mest markante forbedring i ydeevnen ved brug af sparsomme indekser ses i kommandoen 'git stash', hvis udførelseshastighed er steget med 80% i nogle situationer.
- Der er implementeret en ny mekanisme kaldet "cruft packs" til pakkefunktionen af utilgængelige objekter (unreachable), som ikke har nogen referencer i repository (hverken af branches eller tags). Utilgængelige objekter fjernes af affaldsindsamleren, men forbliver en periode i repositoryet for at undgå race-tilstande før de bliver slettet. For at spore varigheden af de utilgængelige objekter kræves det at disse får knyttet labels med ændringstidspunkter, hvilket ikke muliggør at gemme dem i én pack-fil, hvor alle objekter har et fælles ændringstidspunkt. Tidligere medførte det at gemme hvert objekt i en separat fil problemer, når der var mange nye utilgængelige objekter, der endnu ikke var klar til sletning. Den foreslåede mekanisme "cruft packs" gør det muligt at gemme alle utilgængelige objekter i én pack-fil, mens data om ændringstidspunktet for hvert objekt registreres i en separat tabel, der opbevares i en fil med filtypenavnet ".mtimes".
- Der er implementeret en indbygget mekanisme til at spore ændringer i filsystemet for Windows og macOS, som muliggør undgåelse af at gennemgå hele arbejdsbiblioteket ved udførelse af operationer som "git status". Tidligere kunne eksterne værktøjer som Watchman tilføjes via hooks for at spore ændringer i filsystemet, men dette krævede installation af yderligere programmer og konfiguration. Nu er den angivne funktionalitet indbygget og kan aktiveres med kommandoen "git config core.fsmonitor true".
- I kommandoen "git sparse-checkout" er understøttelsen af den alternative "—cone" metode til mønstergenkendelse ved delvis kloning blevet erklæret forældet. Metoden gjorde det muligt at opregne specifikke filer ved at anvende syntaksen fra ".gitignore", hvilket ikke muliggør optimering ved hjælp af delvise indekser.
- Fleksibiliteten i konfigurationen af fsync() til at skrive ændringer til disken er forbedret. Parameteren «core.fsyncMethod» har nu støtte for synkroniseringsstrategien «batch», der gør det muligt at øge hastigheden ved skrivning af et stort antal enkeltfiler ved at samle ændringer i skriveback-cache, som derefter kan blive udskrevet med et enkelt fsync()-kald. En test, hvor 500 filer blev tilføjet med kommandoen «git add», blev udført på 0,15 sekunder med den nye tilstand, mens det tog 1,88 sekunder at kalde fsync() for hver fil, og uden fsync - 0,06 sekunder.
- Kommandoerne til grene, som «git log» og «git rev-list», har fået tilføjet muligheden «--since-as-filter=X», som tillader at filtrere information om commits, der er ældre end «X». I modsætning til muligheden «--since» er den nye kommando implementeret som et filter, der ikke stopper gennemgangen efter den første commit, der er ældre end den angivne tid.
- I kommandoen «git remote» er der tilføjet en flag «-v», der sikrer udgangen af information om delvise kloner af repository.
- Der er tilføjet indstillingen «transfer.credentialsInUrl», som kan tage værdierne «warn», «die» og «allow». Hvis der angives legitimationer i klartekst i parameteren «remote..url», vil et forsøg på at udføre «fetch» eller «push» mislykkes med en fejl, hvis indstillingen «transfer.credentialsInUrl» er sat til «die», eller med en advarsel, hvis den er sat til «warn».
- Som standard er en ny implementering af den interaktive tilstand for kommandoen «git add -i», der er genopbygget fra Perl til C, blevet aktiveret.
Kilde: opennet.ru
