Den nye version af det distribuerede versionsstyringssystem Git 2.48 er offentliggjort. Git er kendetegnet ved høj ydeevne og tilbyder værktøjer til ikke-lineær udvikling, der er baseret på grening og sammensmeltning af grene. For at sikre integriteten af historikken og modstandsdygtigheden over for tilbagevirkende ændringer anvendes implicit hashing af hele den tidligere historie i hvert commit samt digital signering af udviklernes tags og commits. Git-koden distribueres under GPLv2+-licensen.
Sammenlignet med den tidligere version er der i den nye version indført 605 ændringer, forberedt med deltagelse af 93 udviklere, hvoraf 35 deltager i udviklingen for første gang. Vigtige nyheder:
- Muligheden for at bygge med byggesystemet Meson er blevet implementeret, ud over GNU Make og CMake. For at bygge Git kan man nu bruge kommandoen «meson setup build && ninja -C build». Det bemærkes, at Makefile, der anvendes med GNU Make, er vokset til 3887 linjer og ikke er så enkel, som man kunne ønske. Meson-værktøjet forenkler arbejdet med byggesystemet, er praktisk til tværplatformsbygger og gør bygningen mere tilgængelig for nybegyndere eller udviklere uden erfaring med Make-værktøjet. Der er ingen planer om at stoppe understøttelsen af Make og CMake i den nærmeste fremtid.
- Der er tilføjet byggeindstillinger, der muliggør brugen af alternative SHA-1 hash-implementeringer ved beregning af kontrolsummen, der bruges til at kontrollere integriteten af data blokke i pack-filer. Ydelsen ved beregning af kontrolsummer er afgørende, f.eks. bruges cirka 78 % af CPU-tiden til beregning af dem ved kloning af et repository med Linux-kernen. Den anvendte implementering omfatter ekstra kollisionskontroller og beskyttelse mod angreb på SHA-1, såsom SHAttered og Shambles. Sådan beskyttelse, der kræver ekstra ressourcer, giver kun mening, når SHA-1 bruges til kryptografiske formål og er ubrugelig ved kontrol af integriteten af indeksdata.
For building Git with a faster SHA-1 implementation not suitable for cryptosystems, a series of *_UNSAFE options has been proposed, such as "OPENSSL_SHA1_UNSAFE". On GitHub, building with a simplified SHA-1 has improved the performance of fetch and clone operations by 10-13%.
- The ability to use the option "--remerge-diff" in the "range-diff" command has been added, allowing you to show the differences between the overall result of a merge and the actual data reflected in the commit after executing the "merge" command. When using the "--remerge-diff" option, the differences between conflict resolutions are not separated for each parent branch but are shown as overall differences between the file with merge conflicts and the file where conflicts have been resolved. In the context of the "range-diff" command, the new option may be useful for comparing sets of commits after rebasing a sequence of commits with the "--rebase-merges" option.
- The ability to run a Git test suite with memory leak detection mode has been added. Since Git provides utilities that terminate after the invoked function completes, memory leaks were previously not seen as a significant issue. The need to completely eliminate memory leaks became relevant after starting work on offloading internal functionality to a separate library that can be used in long-running processes.
- The formation of a list of deprecated modes and features, whose support is planned to be discontinued in the future, has begun. It is anticipated that the removal of deprecated functionality will occur in the Git 3.0 release, which will include changes that break backward compatibility.
- Optimization of the "git for-each-ref" command, which outputs a list of references in the repository, has continued. The optimization that combines handlers for filtering references and formatting output is now applied not only for unsorted output but also when specifying the "--sort" option.
- Implementeringen af backend "reftable" er forbedret med bloklagring for effektiv opbevaring af referencer til brancher og tags i lageret. Reftable muliggør betydelige hastighedsforbedringer ved søgning, læsning og skrivning i repositories med et meget stort antal referencer. I den nye version er tilgangen til nogle hjælpe-API'er ophørt for yderligere at fjerne libgit-biblioteket fra byggeafhængighederne. Adaptiv fejlhåndtering er implementeret for de fejl, der returneres af hukommelsesallokeringsfunktioner (mangel på hukommelse fører nu ikke til programnedbrud). Oprettelse af referencer er blevet accelereret, og hukommelsesforbruget er blevet reduceret.
- Problemer, der førte til uendelig løkke og beskadigelse af repository efter udførelsen af kommandoen "git gc", er løst i implementeringen af partielt kloning.
- Når kommandoen "git fetch " udføres, og "refs/remotes//HEAD" ikke findes på det lokale system, men der findes en branch på den anden side, som HEAD henviser til, vil "refs/remotes//HEAD" nu blive omdirigeret til denne branch. For at styre synkroniseringen af "refs/remotes//HEAD" med HEAD-værdien på den anden side af forbindelsen, er indstillingen remote..followRemoteHEAD" tilføjet.
- Indstillingen "remote..serverOption" er tilføjet, som svarer til kommandolinjeindstillingen "--serverOption=".
- I kommandoen "git rebase --rebase-merges" er brugen af navne på branches som labels sikret, hvor det er muligt.
- Der er tilføjet flaget '-e' til kommandoerne 'git notes add' og 'git notes append', som åbner noten i en ekstern teksteditor angivet gennem miljøvariablen GIT_EDITOR.
- Kompatibiliteten med GCC 15 og standarden C23 er forbedret.
- Understøttelsen af gamle versioner af libcURL og Perl er ophørt.
Kilde: opennet.ru
