Git 2.54 uvodi povijest gita i modernizira upravljanje repozitorijima

  • Izdanje Gita 2.54 s preko stotinu suradnika i snažnim fokusom na jednostavno prepisivanje povijesti.
  • Nova eksperimentalna git naredba za povijest za preformuliranje i dijeljenje commitova bez dodirivanja radnog stabla.
  • Kuke definirane konfiguracijom, ponovno upotrebljive u više repozitorija i kombinirane događajem.
  • Učinkovitije održavanje zahvaljujući zadanom geometrijskom prepakiranju i brojnim naprednim poboljšanjima.

git 2.54

Dolazak de Git 2.54 Ovo označava novi korak u evoluciji najraširenijeg sustava za kontrolu verzija za razvoj softvera na svijetu. Projektna zajednica, s preko 130 ljudi koji surađuju na ovom ciklusu, usredotočila se na pojednostavljenje uobičajenih zadataka bez žrtvovanja snage koja karakterizira Git.

Među novim značajkama koje bi mogle biti najzanimljivije su novi način prepisati povijest Na puno izravniji način, mogućnost konfiguriranja dijeljenih kuka iz zajedničkih konfiguracijskih datoteka i interna poboljšanja koja traže brže i lakše održavajuće repozitorije, posebno u velikim ili korporativnim projektima.

Git 2.54: Pregled novog izdanja

Git 2.54 je međuverzija na putu prema budućoj grani 3.0, ali donosi promjene koje utječu na svakodnevni rad mnogih programera. Kao prvo, Objavljena je eksperimentalna git povijest naredbeDizajnirano za jednostavne operacije prepisivanja povijesti. Nadalje, sustav kuka je proširen i moderniziran te se sada može upravljati iz postavki; strategija geometrijskog održavanja sada je zadana.

Osim toga, poboljšanja su uključena u već poznate naredbe kao što su git add -p, git replay, git status ili git rebasekao i prilagodbe HTTP transporta, način prikaza GPG potpisa i interni rad baze podataka objekata. Iako su mnoge od ovih novih značajki napredne, njihov utjecaj bit će vidljiv u uobičajenim tijekovima rada u tvrtkama, javnoj upravi i projektima otvorenog koda s velikim repozitorijima.

Nova eksperimentalna git povijest naredbi: jednostavno prepisivanje commitova

Jedan od glavnih dodataka u Gitu 2.54 je povijest gita, još uvijek eksperimentalna naredba namijenjena pokrivanju slučajeva gdje je korištenje interaktivnog rebase-a pretjerano. Do sada je glavni alat za izmjenu lokalne povijesti bio git rebase -i, vrlo fleksibilan, ali i složeniji i skloniji ostavljanju korisnika u konfliktnim stanjima koja se moraju rješavati ručno.

s povijest gita Za specifične zadatke traži se izravniji pristup: na primjer, ispravite tipografsku grešku u poruci commita od prije nekoliko promjena ili dijeljenjem commita koji je postao prevelik na dva dijela. Ideja je ponuditi kontrolirani način podešavanja povijesti bez potrebe za postavljanjem cijelog mehanizma interaktivnog rebasea s popisima zadataka i međukoracima.

podnaredba reword: prilagođavanje poruka commita bez dodirivanja radnog stabla

Prvi način rada koji nova narudžba pokreće je git history reword <commit>Kada se pozove, Git otvara korisnički konfigurirani editor s navedena poruka potvrdešto vam omogućuje izravnu izmjenu. Kada spremite i zatvorite uređivač, Git prepisuje taj commit i automatski ažurira grane koje se spuštaju iz njega kako bi pokazivale na novu verziju.

Ključna razlika u usporedbi s interaktivnim rebaseom je u tome što `git history reword` ne dira ni radno stablo ni indeksAžurira samo povijest. To ga čini posebno korisnim u okruženjima kontinuirane integracije ili automatiziranim skriptama, jer može raditi čak i na golim repozitorijima, što je uobičajeno u internim kodnim poslužiteljima tvrtki ili institucija gdje ne postoji povezano radno stablo.

podnaredba split: interaktivno razdvajanje commita

Drugi način rada, git history split <commit>Dizajniran je za situacije gdje jedan commit sadrži promjene koje treba odvojiti. Kada se izvrši, Git prikazuje dijelove povezane s tim commitom i omogućuje vam da odaberete koji će se izdvojiti u novi roditeljski commit, slično kao što radi `git extract`. git dodaj -p prilikom odlučivanja koje dijelove koda dodati u indeks.

Nakon što su fragmenti odabrani, Git stvara Novi commit s odabranim hunkovima kao roditeljem originalaNeodabrane promjene zadržava u prethodnom commitu. Zatim prepisuje potomske grane kako bi pokazivale na novu strukturu povijesti. Ponovno, operacija se izvodi bez mijenjanja trenutnog sadržaja radnog stabla, smanjujući vjerojatnost ostavljanja repozitorija u kompliciranom međustanju.

Ograničenja i kompatibilnost s drugim tijekovima rada

Kako bi ponašanje bilo pod kontrolom, git povijest ne podržava povijest sa spajanjem commitova i odbija nastaviti ako operacija rezultira sukobima spajanja. Dizajniran je za manje prilagodbe, a ne za masovna prepisivanja poput onih koja se obično rješavaju s git rebase -i ili agresivnije strategije čišćenja povijesti.

Interno, zapovjedništvo se oslanja na mehanizam git ponavljanjekoji se konsolidirao kao eksperimentalni alat za reprodukciju commitova na drugoj bazi bez dodirivanja radnog stabla. Dio ovog rada sastojao se od izdvajanja te logike u zajedničku biblioteku, tako da oboje git history jer druge buduće funkcionalnosti mogu imati koristi od modularnije infrastrukture koju je lakše automatizirati pomoću skripti ili alata trećih strana.

Kuke temeljene na konfiguraciji: dijeljenje i kombiniranje automatizacija

Još jedna značajna nova značajka Gita 2.54 je mogućnost definirajte kuke izravno u konfiguracijskim datotekama, umjesto oslanjanja isključivo na skripte smještene u direktoriju .git/hooks ili na ruti koju je označio core.hooksPathOva promjena znatno olakšava dijeljenje provjera između različitih repozitorija bez potrebe za ručnom replikacijom datoteka.

Do sada, za primjenu, na primjer, formatera koda ili analizatora tajni prije svakog commita na više projekata, bilo je potrebno kopirati hook skriptu u svako spremište ili koristiti vanjske alate za upravljanje hookovima. S novim pristupom moguće je definirati središnje kuke u ~/.gitconfig ili u a /etc/gitconfig korporativni i da se oni primjenjuju gdje je to potrebno.

Definiranje kuka konfiguracijom i više naredbi po događaju

Nova sintaksa temelji se na ključevima konfiguracije stila hook.<nombre>.command y hook.<nombre>.eventPrvi označava koja će se naredba izvršiti, a drugi određuje koji događaj hook-a ga aktivirana primjer pre-commit ili pre-pushBudući da se radi o standardnoj konfiguraciji, ove postavke mogu koegzistirati na različitim razinama: korisničkoj, sistemskoj ili repozitorijskoj.

Nadalje, Git sada to dopušta više kuka je dodijeljeno istom događajuDrugim riječima, možete definirati, na primjer, linter i skener vjerodajnica koji će se pokretati na svakom od njih. pre-commitbez potrebe za ručnim kombiniranjem u jednu skriptu. Git iterira kroz unose konfiguracije redom i izvršava svaku naredbu, a istovremeno zadržava podršku za klasičnu skriptu. $GIT_DIR/hooks, koji se nastavlja izvršavati na kraju kako ne bi prekinuo prethodne konfiguracije.

Upravljanje, deaktivacija i interna modernizacija kuka

Za provjeru koje su udice aktivne i odakle dolaze, ugrađena je sljedeća naredba git hook listšto pokazuje porijeklo svakog od njih, nešto korisno pri upravljanju centralizirane konfiguracije U korporativnim okruženjima, ako određeno spremište treba isključiti hook naslijeđen iz globalne datoteke, dovoljno je postaviti hook.<nombre>.enabled = false, bez potrebe za brisanjem ili izmjenom izvorne konfiguracije.

Ispod haube, Git ima ujedinio i modernizirao način na koji rješava mnoge svoje interne problemeNekoliko točaka integracije koje su se prethodno upravljale ad hoc rutama, kao što su kuke za pre-push, post-rewrite ili onih od receive-packSada koriste novi hooks API. To ne samo da donosi dosljednost, već i olakšava okruženjima za kontinuiranu integraciju ili platformama za oblikovanje koda prilagodbu budućim promjenama bez potrebe za prepisivanjem specifičnih integracija.

Geometrijsko održavanje kao zadana strategija

U prethodnim verzijama, Git je uveo tzv. strategiju geometrijski unutar git maintenanceOsmišljena kako bi smanjila troškove zadataka ponovnog pakiranja u velikim repozitorijima, ova strategija analizira postojeće datoteke paketa i traži kombinacije koje tvore geometrijsku progresiju po broju objekata, sažimajući njihov sadržaj bez potrebe za potpunim sakupljanjem smeća svaki put.

S Gitom 2.54, ovaj pristup postaje zadana opcija za ručno održavanjeKada se pokrene git maintenance run Bez specificiranja strategije, geometrijski pristup se automatski odabire, umjesto izravnog pribjegavanja klasičnom zadatku gc koji pokušava sve grupirati u jedan paket.

U praksi to znači da Spremišta se održavaju učinkovitije Od samog početka, ovo je posebno zanimljivo za projekte s dugom poviješću ili za organizacije koje upravljaju velikim monorepozitorijima. Geometrijska strategija kombinira inkrementalne pakete kada to ima smisla i pribjegava samo gc Završi kada će se sve zapravo konsolidirati u jednu packfile datoteku. Tijekom procesa, graf commit-a, reflogovi i ostale pomoćne strukture se ažuriraju.

Oni koji su već konfigurirali maintenance.strategy = geometric Neće primijetiti nikakve promjene, jer se ta preferencija poštuje. A oni koji radije nastavljaju s tradicionalnim pristupom mogu nametnuti strategiju gc konfiguriranje maintenance.strategy = gcčime se održava kompatibilnost s konzervativnijim tokovima.

Poboljšanja interaktivnih i eksperimentalnih naredbi

Osim glavnih novih značajki, Git 2.54 donosi dobar niz promjena usmjerenih na poboljšati svakodnevno korisničko iskustvoposebno u naredbama koje se interaktivno koriste za upravljanje promjenama.

Poboljšanja u git dodavanjem -py novih opcija navigacije

Interaktivni način rada git add -p i povezane naredbe dobivaju razna poboljšanja upotrebljivosti. Prilikom navigacije između dijelova pomoću tipki J y KGit sada prikazuje je li fragment je prethodno prihvaćeno ili preskočenoizbjegavajući ručno pamćenje svake odluke.

Dodana je i opcija --no-auto-advancešto mijenja ponašanje prilikom završetka s dijelovima datoteke. Umjesto automatskog prelaska na sljedeću datoteku, sesija ostaje na trenutnoj, što vam omogućuje korištenje < y > za mirnije kretanje između datoteka. Ovaj način rada koristan je kada želite pregledati odabir promjena u cjelini prije nego što ih potvrdite.

git replay: veća zrelost za ponovno izvršavanje commitova

Eksperimentalni redoslijed git ponavljanjeFunkcija osmišljena za repliciranje commitova na novoj bazi bez mijenjanja radnog stabla nastavlja dobivati ​​mogućnosti. U ovoj verziji sada izvodi atomski ažuriraj reference Prema zadanim postavkama, umjesto ispisivanja naredbi update-ref na standardnom izlazu.

Osim toga, uključuje način rada --revert omogućujući poništi promjene iz niza commitovaSposoban je odbaciti commitove koji postanu prazni tijekom procesa i sada podržava ponovno reprodukciju povijesti do korijenskog commita. Ova poboljšanja dobro se uklapaju u korištenje git history, koji se oslanja na istu infrastrukturu kako bi ponudio sigurnije iskustvo.

Nova opcija – trailer u git rebaseu

Još jedna zanimljiva prilagodba je dodavanje --trailer en git rebasekoji koristi logiku interpret-trailers za dodajte isti trailer svakom overshot commituUmjesto izrade dugih naredbi s -x i poziva na git commit --amend --no-edit --trailer=...Željenu prikolicu možete izravno odrediti prilikom pokretanja preopterećenja.

To uvelike pojednostavljuje repetitivne zadatke poput uključivanja linija teksta Reviewed-by: ili anotacije slične nizu commitova, nešto uobičajeno u formalnim procesima pregleda koda koji se koriste u distribuiranim timovima.

HTTP transport i upravljanje potpisima: profinjenije ponašanje

Što se tiče mrežne komunikacije, Git 2.54 uvodi relevantne promjene u rukovanju HTTP odgovorima i u interpretaciji kriptografskih potpisa povezanih s commitima i tagovima.

Upravljanje HTTP 429 odgovorima i konfiguriranje ponovnih pokušaja

Gitov HTTP transport uči ispravno interpretirati kodove 429 «Previše zahtjeva»Do sada se, kada bi poslužitelj vraćao grešku 429, to smatralo fatalnom greškom i operacija bi propala. Počevši od ove verzije, Git može ponovno pokušati zahtjev poštujući vrijednost zaglavlja. Retry-After ako je prisutno ili korištenjem konfiguriranog kašnjenja putem nove opcije http.retryAfter.

Prilagodbe su također dodane http.maxRetries y http.maxRetryTime, koji dopuštaju kontrolirati maksimalni broj ponovnih pokušaja i ukupno vrijeme utrošeno na njihOvo je praktično u korporativnim okruženjima gdje je potreban pristup preopterećenim poslužiteljima ili poslužiteljima sa strogim pravilima ograničavanja zahtjeva, što pomaže u pojednostavljenju poslovanja. fetch y push biti otporniji bez kažnjavanja poslužitelja.

Rukovanje GPG potpisima s isteklim ključevima

Što se tiče sigurnosti, ispravljeno je potencijalno obmanjujuće ponašanje: kada je commit potpisan GPG ključem koji je naknadno istekao, Git je prikazao potpis u alarmantna crvena bojaTo je sugeriralo da potpis nije valjan. Međutim, ako je potpis bio valjan u to vrijeme, ta valjanost bi trebala ostati čak i ako je ključ u međuvremenu istekao.

Git 2.54 prilagođava ovu logiku i nastavlja razmatrati Potpisi koji su ispravno napravljeni prije isteka ključa su važeći.Time se izbjegavaju nepotrebna upozorenja. Pruža točniju sliku povijesti repozitorija, što je relevantno za projekte s dugim životnim ciklusom, poput institucionalnog ili softvera javne uprave koji se održava dugi niz godina.

Nove mogućnosti inspekcije i prilagodba povijesti

Nekoliko naredbi osmišljenih za istraživanje povijesti dobilo je poboljšanja koja povećavaju njihovu fleksibilnost i omogućuju prilagođenije rezultate za svaki slučaj.

`git log -L` se integrira sa standardnim strojevima za razlikovanje

Izbor git log -LFunkcija koja omogućuje praćenje evolucije niza redaka u određenoj datoteci ponovno je implementirana kako bi se njezin izlaz usmjeravao kroz standardni Git mehanizam za razlikovanjePrije je koristio vlastiti put, što ga je činilo nekompatibilnim s vrlo korisnim opcijama kao što su -S y -G (tzv. "pikači") ili s različitim formatima zakrpa.

S promjenom uvedenom u Gitu 2.54, -L postaje kompatibilan s napredno pretraživanje sadržaja i različitih formatauključujući --word-diff o --color-movedNa taj način, izlaz se može ograničiti na određenu funkciju i istovremeno filtrirati samo za commitove koji dodaju ili uklanjaju određeni simbol, što olakšava revizije koda i regresijsku analizu.

git blame s odabirom diff algoritma

Naredba krivnja za git, koristi se za provjeru koji je commit uveo svaki redak datoteke, uči novu opciju --diff-algorithmTo vam omogućuje odabir između različitih algoritama za razliku, kao što su histogram, strpljenje ili minimalno, pri izračunu atribucije linije.

Ovisno o vrsti promjena koje je datoteka pretrpjela, Odabir jednog algoritma u odnosu na drugi može ponuditi jasnije rezultateTo smanjuje šum u vrlo aktivnim povijestima koda. U okruženjima gdje se detaljni pregledi visoko cijene, ova razina kontrole može napraviti veliku razliku prilikom istraživanja tko je uveo određeni blok koda.

Optimizacija pohrane i objektne baze podataka

Promjene u ovoj verziji nisu ograničene samo na korisničko sučelje; također je obavljen značajan posao na načinu na koji Git funkcionira. organizira i pristupa podacima internoTo ima posebno značajan utjecaj na velika spremišta.

Inkrementalni indeksi višestrukih pakiranja i zbijanje

Pozivi višepaketne inkrementalne indekse (MIDX)Značajke koje su već poboljšane u prethodnim verzijama, Git 2.54 sada uključuje podršku za sažimanje slojeva. Ovaj mehanizam kombinira manje MIDX slojeve, zajedno s njihovim pripadajućim bitmapamama dostupnosti, kako bi lanac slojeva ostao na razumnoj veličini.

Ovaj korak je važan za praktično korištenje inkrementalnog MIDX-a u dugovječnim repozitorijimakao što su oni velikih organizacija ili društvenih projekata s dugogodišnjom poviješću. Sažimanje slojeva smanjuje složenost pretraživanja i poboljšava performanse u operacijama kao što su fetch, clone djelomični ili povijesni pregledi.

Restrukturiranje objektne baze podataka (ODB)

Interno, a dubinsko refaktoriranje API-ja objektne baze podataka (ODB). Sada se koristi dizajn priključnog backenda, u kojem funkcije poput read_object(), write_object() o for_each_object() Otpremaju se pomoću pokazivača funkcija prema podrijetlu.

Iako ova promjena nije odmah vidljiva krajnjem korisniku, ona postavlja temelje za budući alternativni pohranjivači podataka ili fleksibilnije konfiguracije objektnih baza podataka. Za tvrtke sa specifičnim zahtjevima za usklađenost s propisima ili integracijom s vlastitim sustavima za pohranu, ova modularnost može otvoriti vrata prilagođenijim rješenjima.

Poboljšanja statusa, aliasa, dopunjavanja i ostalih detalja

Git 2.54 također uključuje niz prilagodbi koje, iako manje, doprinose poboljšanju svakodnevne upotrebe i prilagodbi Gita različitim jezičnim i mrežnim kontekstima.

git status i usporedba s nekoliko udaljenih grana

Naredba git-status predstavlja opciju konfiguracije status.compareBranchesPrema zadanim postavkama, ova naredba je prikazivala kako se trenutna grana uspoređuje s konfiguriranom uzvodnom granom, nešto tipično poput origin/mainS novom opcijom možete zatražiti usporedbu s push granom ili s objema istovremeno.

Ova funkcionalnost je osmišljena za trokutasti tokovi, uobičajeno pri radu s forkovima: možete preuzeti sa službenog udaljenog uređaja i poslati promjene na drugi, uvijek imajući jasno koliko commitova odvaja svaku granu, što smanjuje iznenađenja prilikom sinkronizacije repozitorija.

Alias ​​s međunarodnim znakovima

Do sada su Git aliasi bili ograničeni na ASCII alfanumeričke znakove i crtice, što je sprječavalo korištenje imena u drugim jezicima s naglascima ili različitim abecedama. Nova sintaksa podržava gotovo sve znakove osim prijeloma redaka i NUL-a. Podudaranje se vrši kao sirovi bajtovi i razlikuje velika i mala slova. Nadalje, sustav samodovršavanja ljuske ažuriran je za rukovanje ovim aliasima, što Git čini lakšim za korištenje u višejezičnim timovima.

Git backfill je praktičniji u djelomičnim klonovima

Eksperimentalna naredba git dopunjavanjeNaredba koja se koristi za preuzimanje nedostajućih blobova u djelomičnim klonovima također se poboljšava. Prije je naredba uvijek dohvaćala dostupne blobove iz HEAD kroz cijelo stablo, što bi moglo biti pretjerano u posebno velikim repozitorijima.

Git 2.54 dodaje podršku za pregled argumenata i specifikacije putatako da se zatrpavanje može ograničiti na raspon povijesti (na primjer, main~100..main) ili na određene specifične rute (git backfill -- '*.c'), uključujući uzorke zamjenskih znakova. To znatno olakšava rad s velikim djelomičnim klonovima gdje je potrebno dovršiti povijest samo određenog dijela koda.

Ostale prilagodbe i detaljna poboljšanja

Popis promjena u Gitu 2.54 uključuje dugi popis malih poboljšanja. Među njima je i ispravak za algoritam diff. histogramšto sada sprječava fazu sažimanja da pomiče grupe promjena na način koji prekida odabrane sidrene linije, stvarajući čišće i manje redundantne razlike.

Alati kao što su git config list , što se uspostavlja kao službeni način popisivanja konfiguracije, git merge-file koji zatim poštuje dostupnu konfiguraciju čak i izvan repozitorija, te nekoliko povezanih uslužnih programa git send-emailkoji dobivaju podršku za klijentske certifikate i pažljivije rukovanje skupovima znakova koje je odabrao korisnik.

Gitova evolucija se nastavlja dobrim tempom s verzijom 2.54, koja kombinira vidljiva poboljšanja za korisnika, poput novog poretka git history ili konfigurirajuće kuke, koje zahtijevaju značajan rad na unutarnjoj infrastrukturi sustava. Sve to ukazuje na robusniji, fleksibilniji ekosustav, bolje pripremljen za izazove sve većih repozitorija i raznolikijih timova.

QtCreator 18
Povezani članak:
Qt Creator 18 stiže s eksperimentalnom podrškom za kontejnere