Predstavljen izdanje distribuiranog sustava za upravljanje izvorom Git 2.54. Git se ističe visokom proizvodnošću i pruža alate za nelinearni razvoj koji se temelje na granama i spajanjima. Radi osiguranja cjelovitosti povijesti i otpornosti na promjene „unazad”, koristi se implicitno heširanje cijele prethodne povijesti u svakom commitu, kao i verifikacija digitalnim potpisima developera pojedinih oznaka i commitova. Git kod distribuira se pod GPLv2+ licencom.
U usporedbi s prethodnim izdanjem, nova verzija sadržava 770 promjena, pripremljenih u suradnji 137 developera (66 ih je prvi put sudjelovalo u razvoju Gita).
-
Implementirana je naredba „git history“, koja pruža eksperimentalne mogućnosti za prepisivanje povijesti promjena, jednostavnije i sigurnije za korištenje od rebasinga commitova putem git rebase naredbe. Pružaju se dvije operacije:
- git history reword za prepisivanje poruke u zadanom commit-u bez promjene radnog stabla i indeksa (osim napomene, ostalo ostaje netaknuto). Na primjer, za ispravak slovne greške.
- git history split za interaktivno dijeljenje zadanog commit-a na dva različita commit-a s premještanjem odabranih dijelova iz izvornog commit-a u dodatni commit.
U budućim izdanjima očekuje se dodavanje dodatnih naredbi: git history fixup za ispravak commit-a, git history drop za brisanje commit-a, git history reorder za promjenu reda slijeda commit-a i git history squash za spajanje commit-a.
-
Implementirana je nova metoda za određivanje rukovaoca (hook) u konfiguracijskim datotekama. Umjesto postavljanja skripti s handlerima u direktorij .git/hooks u svakom repozitoriju, naredbe za pozivanje handlera sada se mogu postaviti izravno u konfiguracijskim datotekama. Postavke se mogu vezati uz repozitorij ili navesti u konfiguracijskim datotekama koje vrijede za sve repozitorije (/etc/gitconfig) ili korisničke repozitorije (~/.gitconfig). Moguće je vezati više handlera za jedan događaj. Skripte iz .git/hooks i dalje se pozivaju, ali se pokreću nakon handlera iz konfiguracijskih datoteka. Za pregled popisa handlera treba upotrijebiti naredbu git hook list, a za selektivno onemogućavanje poziva handlera – postavku hook..enabled = false:
[hook "linter"] event = pre-commit command = ~/bin/linter --cpp20 [hook "no-leaks"] event = pre-commit command = ~/bin/leak-detector $ git hook list pre-commit global linter ~/bin/linter --cpp20 local no-leaks ~/bin/leak-detector
- U naredbi «git maintenance» prema zadanim postavkama aktivirana je strategija geometric (git config set maintenance.strategy geometric), koja omogućuje smanjenje vremena održavanja velikih monorepozitorija. U usporedbi s prethodno primijenjenom strategijom, koja koristi logiku kao u naredbi git gc, nova strategija izbjegava repakiranje svih objekata i isključuje prekomjerne operacije, poput spajanja svih pack-datoteka (ako je moguće, spajanje se vrši djelomično i bez čišćenja izbrisanih objekata).
- Baza podataka objekata (ODB) i povezani API-ji prebačeni su na novu arhitekturu, temeljenu na korištenju priključnih backendova. Provedena restrukturacija apstrahira format pohrane objekata i kasnije će omogućiti implementaciju takvih mogućnosti kao alternativni backendovi i formati objekata, na primjer, za učinkovitiju pohranu velikih binarnih datoteka ili za optimizaciju rada s velikim git hostingom.
- U naredbi «git repo structure», koja prikazuje informacije o strukturi repozitorija, osigurava prikaz ne samo ukupne veličine, već i prikazuje najveće objekte svakog tipa, što omogućuje procjenu veličine bez korištenja vanite aplikacije. git-sizer.
$ git repo structure … | * Najveći objekti | | * Komit | | * Maksimalna veličina [1] | 17.23 KiB | | * Maksimalni roditelji [2] | 10 | | * Drveće | | * Maksimalna veličina [3] | 58.85 KiB | | * Maksimalni unosi [4] | 1.18 k | | * Blobovi | | * Maksimalna veličina [5] | 1019.51 KiB | | * Oznake | | * Maksimalna veličina [6] | 7.13 KiB |
- U naredbi «git replay», koja se koristi umjesto git rebase za rekonstrukciju povijesti na serveru bez radnog direktorija, uključeno je po defaultu atomsko ažuriranje referenci (umjesto ispisivanja popisa naredbi update-ref za ručno izvršavanje), implementirana je opcija —revert za poništavanje promjena iz serije komitova, omogućeno je odbacivanje rezultantnih pustih komitova i omogućena je rekonstrukcija povijesti do korijenskog komita.
- U „git rev-list» i slične naredbe dodana je opcija —maximal-only za prikazivanje samo komitova koji nisu dostupni drugim komitovima.
- U naredbu «git repo info» dodana je opcija —keys za ispis popisa svih poznatih ključeva.
- U naredbi «git add -p» prilikom navigacije između blokova koda pomoću tipki „J” i „K” obezbeđeno je označavanje već odobrenih i preskočenih blokova. Dodana je opcija —no-auto-advance za onemogućavanje automatskog prelaska na sljedeću datoteku, kako bi se moglo vratiti na prethodne datoteke prije komitovanja.
- Optimiziran je web sučelje „gitweb» za rad s mobilnih uređaja.
- U naredbi «git apply –directory» prije korištenja osigurana je normalizacija datotečnih putanja, poput .\/un\/..\/normalized\/path.
- Dokumentirana je mogućnost dodavanja vlastitih podkomandi putem smještaja datoteka git-<cmd> u direktoriju s izvršnim datotekama.
- U naredbu «git send-email» dodana je podrška za klijentske certifikate.
- Za naredbu „git status» ostvarena je konfiguracija status.compareBranches, putem koje se mogu odrediti grane s kojima će se vršiti usporedba trenutne grane:
[status] compareBranches = @{upstream} @{push}
- U „git rebase» dodana je opcija —trailer za ujednostavljenje dodavanja metapodataka svim komitovima:
git rebase —trailer "Reviewed-by: Test <test@example.com>"`
- U naredbu «git fast-import» dodana je mogućnost zamjene potpisa za komitove koji su postali nevaljani nakon uvoza.
- Dodana je podrška za pakiranje (compaction) višepaketnih indeksa MIDX (multi-pack index), pri čemu se manji slojevi MIDX indeksa s informacijama o dostupnosti objekata i povezani bitmap datoteke spajaju, što omogućava smanjenje broja nagomilanih slojeva u starijim repozitorijima.
- U timu git backfill implementirana je mogućnost navođenja revizija (opsega potvrda) i maski putanja (pathspec) za ograničavanje učitanih dijelova povijesti promjena:
git backfill main~100..main git backfill — ‘*.c’
- Dodane su alternativne forme pozivanja komande git config list – git config -l i git config —list.
- Dozvoljena je upotreba ne-ASCII znakova u nazivima aliasa komandi, zadanim u konfiguracijskoj datoteci:
[alias "preuzmi"] command = fetch
- Promijenjeno je prikazivanje potpisa koji su izgubili važnost GPG ključeva, ali su bili valjani prilikom potpisivanja potvrde. Takvi se potpisi sada prikazuju kao ispravni s napomenom o zastarjelosti ključa (ranije su se isticali crvenom bojom, što je stvaralo dojam o njihovoj neispravnosti).
- Prilikom pristupanja repozitorijima putem HTTP-a osigurana je obrada pogreške s kodom 429 (Previše zahtjeva). Zahtjevi koji završe s ovom pogreškom sada se smatraju ne kao fatalni problemi, već kao privremene greške za koje bi se operacija trebala ponoviti nakon nekog vremena. Odgođeno vrijeme za ponavljanje postavlja se putem opcije http.retryAfter, broj ponavljanja – http.maxRetries, vrijeme čekanja – http.maxRetryTime.
Izvor: linux.org.ru
