Nakon tri mjeseca razvoja, objavljen je Git 2.52, distribuirani sustav za upravljanje izvornim kodom. Git se može pohvaliti visokim performansama i pruža nelinearne razvojne mogućnosti temeljene na grananju i spajanju. Kako bi se osigurala povijesna cjelovitost i otpornost na retroaktivne promjene, koristi implicitno hashiranje cijele prethodne povijesti u svakom commitu, kao i digitalne potpise pojedinačnih oznaka i commitova. Git je licenciran pod GPLv2+ licencom.
U usporedbi s prethodnim izdanjem, nova verzija uključuje 637 promjena, kojima je doprinijelo 94 programera (od kojih je 33 bilo novo u razvoju Gita). Ključne nove značajke (1, 2, 3):
- Dodana je naredba "git last-modified" za prikaz popisa datoteka u određenoj reviziji i commitova koji su zadnji put modificirali svaku datoteku. $ git last-modified HEAD b56f6dcd7b4c90192018e848d0810f091d092913 test.h 29330ae4b820147c98e723399e9438c8bee60a8a test1.c 573ad8917beb99dc643b6e7f5c117a294384a575 test2.c
- Dodana je naredba "git repo" za izvođenje radnji povezanih s dohvaćanjem informacija iz repozitorija. Pružene su dvije podnaredbe, "git repo info" i "git repo structure", koje prikazuju informacije o postavkama repozitorija i detalje o strukturi repozitorija (na primjer, možete saznati broj referenci i objekata u repozitoriju). $ git repo info object.format references.format object.format=sha1 references.format=reftable $ git repo structure | Struktura repozitorija | Vrijednost | | ——————— | —— | | * Reference | | | * Broj | 1983 | | * Grane | 4 | | * Oznake | 1125 | | * Udaljene jedinice | 854 | | * Ostalo | 0 | | | | | * Dostupni objekti | | | * Broj | 518955 | | * Potvrde | 77469 | | * Stabla | 188865 | | * Blobovi | 251631 | | * Oznake | 990 |
- Naredba git refs ažurirana je s tri podnaredbe koje objedinjuju različite i preklapajuće operacije niske razine na referencama (git for-each-ref, git show-ref, git update-ref i git pack-refs):
- "git refs optimize" — optimizacija pozadinskog sustava za pohranu referenci (slično kao "git pack-refs").
- "git refs list" - prikazuje popis svih referenci (slično kao "git for-each-ref" ili "git show-ref").
- "git refs exists" — provjerava postojanje reference (analogno kao "git show-ref --exists").
- Format za izvoz i uvoz povijesti commitova proširen je kako bi podržao kriptografske potpise pomoću identifikatora objekata temeljenih na SHA-1 i SHA-256. Naredba "git fast-import" sada podržava obradu potpisanih oznaka slično potpisanim commitima. Dodane su opcije "--signed-commits=<mode>" i "--signed-tags=<mode>" za kontrolu obrade potpisanih commitova i oznaka tijekom uvoza (mode može biti verbatim, warn-verbatim, warn-stri, strip ili abort).
- Naredba "git maintenance" sada podržava novu "geometrijsku" strategiju ("git config set maintenance.strategy geometric"), koja smanjuje vrijeme održavanja velikih monorepozitorija. U usporedbi s prethodno dostupnom strategijom, koja je koristila logiku sličnu "git gc", nova strategija izbjegava ponovno pakiranje svih objekata i eliminira operacije koje zahtijevaju puno resursa, poput spajanja svih paketnih datoteka (gdje je to moguće, spajanje se izvodi u dijelovima i bez čišćenja izbrisanih objekata).
- Dodana je naredba 'git sparse-checkout clean' kako bi se olakšalo vraćanje stanja radnog direktorija uklanjanjem datoteka koje ne odgovaraju novoj definiciji sparse-checkouta i koje ne bi trebale biti prisutne u lokalnoj kopiji prema trenutnim postavkama sparse-checkouta.
- Kako bi se uklonila složenost iz kodne baze i pojednostavilo održavanje, provedeno je refaktoriranje kako bi se smanjila upotreba globalne varijable the_repository.
- Proširena je upotreba Bloom filtera, probabilističkog okvira za provjeru članstva u skupu koji omogućuje lažno pozitivne rezultate nedostajućih elemenata, ali sprječava izostavljanje postojećih elemenata. Bloom filteri sada se koriste za ubrzavanje pretraživanja u povijesti promjena prilikom određivanja zamjenskih znakova u putanjama datoteka, na primjer, "foo/bar/*/baz".
- Performanse naredbe "git describe" povećane su do 30% zahvaljujući korištenju reda prioriteta. Operacije preimenovanja referenci u "git remote rename" su ubrzane. Korištenje indeksa je prošireno u "git ls-files". Naredba "git log -L" je značajno ubrzana uklanjanjem nepotrebnih usporedbi na tri razine prilikom obrade commitova spajanja. Optimizacije su napravljene na biblioteci xdiff.
- Uvedena je opcionalna Rustova implementacija nekih internih funkcija, poput kodiranja i dekodiranja cijelih brojeva promjenjive duljine. Rustov kod se ne koristi prema zadanim postavkama i zahtijeva da bude omogućena zastavica za izgradnju WITH_RUST. U budućnosti se očekuje da će se značajnije interne komponente Gita prepisati u Rustu, a Rust će biti dodan kao obavezna ovisnost za izgradnju u Gitu 3.0.
- Popis promjena koje će se primijeniti u grani Git 3.0 je ažuriran. U Gitu 3.0, zadana postavka init.defaultBranch bit će promijenjena u "main", što znači da će se zadana grana u repozitorijima stvorenim naredbom "git init" zvati "main" umjesto "master". Također je zabilježen prelazak na identifikatore objekata temeljene na SHA-256 prilikom inicijalizacije novih repozitorija. Kako bi se pojednostavila prenosivost između repozitorija s identifikatorima objekata temeljenim na SHA-1 i SHA-256, sada je dostupna mogućnost slanja i povlačenja iz repozitorija pomoću jednog algoritma hashiranja i repozitorija koji koristi drugi algoritam hashiranja.
Izvor: opennet.ru
