Objavljen je Git 2.56, distribuirani sustav za upravljanje izvornim kodom. Git je licenciran pod GPLv2+ licencom. U usporedbi s prethodnim izdanjem, nova verzija uključuje 748 promjena koje su pripremila 104 programera, od kojih je 39 novo u razvoju Git-a. Ključne nove značajke (1, 2, 3):
- Dodan je način rada "git add --resolved" za rješavanje sukoba prilikom spajanja grana. Ovaj način rada provjerava datoteke za oznake sukoba i, ako se oznaka otkrije u barem jednoj datoteci, vraća grešku, ne indeksira nijednu datoteku i prikazuje popis datoteka koje zahtijevaju ispravak. Za razliku od naredbe "git add --update", ovaj novi način rada obrađuje samo datoteke u stanju sukoba i ignorira promijenjene datoteke koje nisu povezane sa sukobom. To omogućuje sigurno dovršavanje spajanja grana čak i ako postoje druga nedovršena uređivanja u radnom direktoriju (naredba "git add --update" dodala je sve prethodno praćene promijenjene datoteke u radnom direktoriju u indeks).
- Rad s velikim repozitorijima značajno je ubrzan optimizacijom algoritma za pretraživanje najnovijih zajedničkih commit-ova prilikom spajanja grana i usporedbe commit-ova. Proces sada uzima u obzir commit-ove koji pripadaju isključivo jednoj grani, što omogućuje da se skeniranje odmah zaustavi nakon pronalaska svih mogućih zajedničkih predaka, bez gubljenja vremena na daljnje pregledavanje povijesti promjena. U jednom testiranom repozitoriju, brzina pretraživanja povećala se u prosjeku 20 puta, dok je u drugom ubrzanje doseglo 70 puta. Prilikom pokretanja naredbe "git merge-base --all v4.8 v4.9" u repozitoriju s kernelom Linux Broj koraka prelaska smanjio se sa 167 tisuća na 3.8 tisuća.
- Način ponovnog pakiranja "--path-walk" prilagođen je za korištenje poslužitelja, omogućujući stvaranje kompaktnijih paketnih datoteka grupiranjem objekata prema njihovoj putanji u stablu direktorija (na primjer, za Fluent UI repozitorij, korištenje "--path-walk" smanjilo je veličinu paketne datoteke s 558 MB na 164 MB). Nova verzija podržava korištenje načina "--path-walk" u kombinaciji s bitmapama dostupnosti i delta otocima, koje Git hosting usluge koriste za ubrzavanje rada i izolaciju forkova iz glavnog repozitorija.
- Uklonjena su uska grla koja su uzrokovala redundantne izračune u velikim repozitorijima: uklonjene su nepotrebne provjere stanja datoteka prilikom pisanja u reftable; uklonjeno je ponovno skeniranje popisa za svaki novi umetak packfile-a; ubrzane su reftable operacije s akumuliranim velikim zapisima brisanja; optimizirane su performanse naredbe git diff prilikom određivanja ograničenja putanje datoteke. Nakon ovih optimizacija, reftable operacije s velikim brojem brisanja ubrzane su 65 puta (s 13 sekundi na 0.2 sekunde), a problematična naredba git diff u Chromium repozitoriju s 500 000 stavki u indeksu sada traje 0.07 sekundi umjesto 8 minuta.
- Eksperimentalna naredba "git history", koja omogućuje prepisivanje povijesti promjena, ažurirana je kako bi uključila operaciju "git history drop" za uklanjanje odabranog commita i automatsko pripajanje njegovih potomaka nadređenom commitu.
- Dodana je naredba "git branch --delete-merged 'origin/*' 'topic-*'" za sigurno brisanje grupa lokalnih grana čije su promjene već pohranjene u vanjsko spremište. Zamjenski znakovi mogu se koristiti za filtriranje grana i spremišta. Zastavica "--dry-run" može se koristiti za analizu kandidata za brisanje bez stvarnog izvođenja operacije.
- Dodana je naredba "git refs create|update|delete|rename" koja kombinira operacije niske razine za stvaranje, brisanje, preimenovanje i ažuriranje referenci.
- Naredba "git bisect run" sada ima opciju "--reset-when-found=[ ]", što automatski vraća repozitorij u stanje prije početka pretrage ili ostavlja problematični commit aktivnim, bez potrebe za zasebnim pokretanjem naredbe "git bisect reset".
- Naredba 'git replay' sada ima zastavicu '--linearize' za korištenje ravne topologije spajanja, slično kao 'git rebase --no-rebase-merges', ali bez pristupa radnom stablu.
- Naredba "git log --follow" sada prati preimenovanja datoteka u nelinearnim povijestima commita, kao što je spajanje podgrana. Putanja datoteke sada se zasebno bilježi za svaki nadređeni commit, što rezultat čini neovisnim o redoslijedu kojim se prolazi kroz povijest commita.
- Dodana je mogućnost korištenja naredbe "git repack -a --filter=blob:limit=1m --drop-filtered" za uklanjanje velikih blobova preuzetih na zahtjev iz vanjskog repozitorija koji se ne koriste u trenutnom indeksu. Ti će se objekti automatski ponovno preuzeti kada im se pristupi u budućnosti.
- Naredba "git log --graph" za grafove s više neovisnih korijena sada dodaje uvlačenje kako bi se jasno odvojili nepovezani commitovi.
- Uobičajene tipografske pogreške, poput navođenja "git push origin/main" umjesto "git push origin main" ili "git branch --set-upstream-to origin main" umjesto "git branch --set-upstream-to=origin/main", sada se otkrivaju i prikazuje se savjet o tome kako koristiti ispravnu varijantu.
Izvor: opennet.ru
