A Git 2.54 bemutatja a git történetét és modernizálja a tárházkezelést

  • Git 2.54 kiadás több mint száz közreműködővel és az egyszerű előzményírásra összpontosító kiemelt figyelemmel.
  • Új kísérleti git history parancs a commitok átfogalmazásához és felosztásához a munkafa érintése nélkül.
  • Konfiguráció által definiált hookok, több adattárban újrafelhasználhatók, és eseményekkel kombinálhatók.
  • Hatékonyabb karbantartás az alapértelmezett geometriai újracsomagolásnak és számos fejlett fejlesztésnek köszönhetően.

git 2.54

Érkezés de git 2.54 Ez egy új lépést jelent a világ legszélesebb körben használt szoftverfejlesztési verziókövető rendszerének fejlődésében. A projektközösség, amely több mint 130 emberből áll, arra összpontosított, hogy egyszerűsítse a gyakori feladatokat anélkül, hogy feláldozná a Gitre jellemző teljesítményt.

Az új funkciók közül, amelyek a leginkább érdekelhetik, egy új módszer a következőkre: átírni a történelmet Sokkal közvetlenebb módon a megosztott hookok konfigurálásának lehetősége közös konfigurációs fájlokból és belső fejlesztésekből, amelyek gyorsabb és könnyebben karbantartható adattárakat céloznak, különösen nagy vagy vállalati projektekben.

Git 2.54: Az új kiadás áttekintése

A Git 2.54 egy köztes verzió a jövőbeli 3.0 ág felé vezető úton, de olyan változásokat hoz, amelyek sok fejlesztő mindennapi munkáját befolyásolják. Egyrészt, Megjelent a kísérleti git history parancsEgyszerű előzmény-átírási műveletekhez tervezve. Továbbá a hook rendszer kibővült és modernizálódott, és mostantól a beállításokból kezelhető; a geometriai karbantartási stratégia mostantól az alapértelmezett.

Ezenkívül a már ismert parancsok is fejlesztésekbe kerültek, mint például git add -p, git replay, git status vagy git rebase parancsokvalamint a HTTP-átvitel, a GPG-aláírások megjelenítési módjának és az objektumadatbázis belső működésének módosításai. Bár ezek közül az új funkciók közül sok fejlett, hatásuk észrevehető lesz a vállalkozások, a közigazgatás és a nagy adattárakkal rendelkező nyílt forráskódú projektek általános munkafolyamataiban.

Új kísérleti parancs git history: a commitok egyszerű átírása

A Git 2.54 egyik legfontosabb újítása a következő: git-előzmények, egy még kísérleti parancs, amelyet olyan esetekre terveztek, amikor az interaktív újraalapozás használata túlzás. Eddig a helyi előzmények módosítására szolgáló elsődleges eszköz a git rebase -i, nagyon rugalmas, de összetettebb is, és hajlamosabb konfliktusos állapotokba hozni a felhasználót, amelyeket manuálisan kell megoldani.

Con git-előzmények Konkrét feladatokhoz közvetlenebb megközelítést keresnek: például javíts ki egy elgépelést egy néhány változtatással ezelőtti commit üzenetében, vagy egy túl nagyra nőtt commit kettéosztása. Az ötlet az, hogy egy kontrollált módot kínáljunk a történet módosítására anélkül, hogy egy interaktív újrabázisozás teljes gépezetét feladatlistákkal és köztes lépésekkel kellene beállítani.

reword subcommand: commit üzenetek módosítása a munkafa érintése nélkül

Az új rend által elindított első mód a következő: git history reword <commit>Amikor a Git meghívódik, a felhasználó által konfigurált szerkesztőt nyitja meg a következővel: megadott véglegesítési üzenetlehetővé téve a közvetlen módosítást. Amikor mented és bezárod a szerkesztőt, a Git átírja a commitot, és automatikusan frissíti az abból leágazó ágakat, hogy az új verzióra mutassanak.

A legfontosabb különbség az interaktív újraalapozáshoz képest az, hogy A `git history reword` függvény nem érinti sem a munkafát, sem az indexet.Csak az előzményeket frissíti. Ez különösen hasznossá teszi folyamatos integrációs környezetekben vagy automatizált szkriptekben, mivel akár csupasz adattárakon is működhet, ami gyakori a vállalatok vagy intézmények belső kódszerverein, ahol nincs hozzárendelt munkafa.

split alparancs: interaktívan feloszt egy commitot

A második mód, git history split <commit>Olyan helyzetekre tervezték, ahol egyetlen commit olyan változtatásokat tartalmaz, amelyeket külön kell választani. Futtatáskor a Git megjeleníti az adott commithoz tartozó hunokat, és lehetővé teszi, hogy kiválaszd, melyeket kell egy új szülő commitba kinyerni, hasonlóan ahhoz, ahogy a `git extract` működik. git add -p amikor eldönti, hogy mely kódrészleteket adja hozzá az indexhez.

Miután a töredékek kijelölésre kerültek, a Git létrehoz egy Új commit, amelyben a hunkokat az eredeti szülőjeként választottukMegőrzi az előző commitban nem kiválasztott módosításokat. Ezután átírja a leszármazott ágakat, hogy az új előzménystruktúrára mutassanak. A művelet ismét a munkafa aktuális tartalmának megváltoztatása nélkül fut le, csökkentve annak valószínűségét, hogy a repository egy bonyolult köztes állapotban maradjon.

Korlátozások és kompatibilitás más munkafolyamatokkal

Hogy a viselkedés kontrollálható maradjon, A git history nem támogatja az egyesítési commitokkal kapcsolatos előzményeket. és nem folytatja a műveletet, ha a művelet összevonási ütközéseket okoz. Kisebb módosításokhoz tervezték, nem pedig nagyszabású átírásokhoz, mint amilyeneket általában a git rebase -i vagy agresszívabb előzménytisztítási stratégiákat.

Belsőleg a parancsnokság a következő gépezetre támaszkodik: git visszajátszásamely kísérleti eszközként konszolidálódik a commitok reprodukálására egy másik bázison a működő fa érintése nélkül. Ennek a munkának egy része abból állt, hogy ezt a logikát egy közös könyvtárba kinyerték, így mindkettő git history mivel más jövőbeli funkciók is profitálhatnak egy modulárisabb infrastruktúrából, amely könnyebben automatizálható szkriptekből vagy harmadik féltől származó eszközökből.

Konfigurációalapú hookok: automatizálások megosztása és kombinálása

A Git 2.54 egy másik figyelemre méltó új funkciója a következő: a hookok közvetlenül a konfigurációs fájlokban definiálása, ahelyett, hogy kizárólag a könyvtárban elhelyezett szkriptekre hagyatkoznánk .git/hooks vagy a jelzett útvonalon core.hooksPathEz a változás sokkal könnyebbé teszi a csekkek megosztását a különböző adattárak között anélkül, hogy manuálisan kellene replikálni a fájlokat.

Eddig például egy kódformázó vagy egy titkos elemző alkalmazásához minden egyes commit előtt több projekten keresztül, a hook szkriptet minden egyes adattárba át kellett másolni, vagy külső hookkezelő eszközöket kellett használni. Az új megközelítéssel lehetőség van a következők meghatározására: központi horgok behelyezése ~/.gitconfig vagy a /etc/gitconfig vállalati, és hogy ezeket szükség esetén alkalmazzák.

Hookok definiálása konfiguráció és eseményenként több parancs alapján

Az új szintaxis stíluskonfigurációs kulcsokon alapul. hook.<nombre>.command y hook.<nombre>.eventAz első jelzi, hogy melyik parancs fog végrehajtódni, a második pedig a következőt adja meg: melyik hook esemény aktiválja aztpéldául egy pre-commit vagy egy pre-pushMivel ez egy szabványos konfiguráció, ezek a beállítások különböző szinteken létezhetnek: felhasználó, rendszer vagy adattár.

Továbbá a Git most már lehetővé teszi, hogy több hook van ugyanahhoz az eseményhez rendelveMás szóval, definiálhat például egy lintert és egy hitelesítőadat-szkennert, amelyek mindegyiken futnak. pre-commitanélkül, hogy manuálisan kellene egyetlen szkriptbe egyesíteni őket. A Git sorban végigmegy a konfigurációs bejegyzéseken, és végrehajtja az egyes parancsokat, miközben fenntartja a klasszikus szkript támogatását. $GIT_DIR/hooks, amely a végén is tovább fut, hogy ne sértse meg a korábbi konfigurációkat.

Horgok kezelése, hatástalanítása és belső modernizációja

Annak ellenőrzéséhez, hogy mely hookok aktívak és honnan származnak, a következő parancsot kell beépíteni: git hook listamely mindegyik eredetét mutatja, ami hasznos a kezelés során központosított konfigurációk Vállalati környezetekben, ha egy adott adattárnak ki kell zárnia egy globális fájlból örökölt hook-ot, elegendő a következő beállítást megadni: hook.<nombre>.enabled = false, anélkül, hogy törölni vagy módosítani kellene az eredeti konfigurációt.

A motorháztető alatt a Git a következőket tartalmazza: egységesítette és modernizálta számos belső funkciójának kezelésétSzámos olyan integrációs pontot, amelyeket korábban eseti útvonalakkal kezeltek, például a következőhöz tartozó hookokat: pre-push, post-rewrite vagy a receive-packMost már az új hooks API-t használják. Ez nemcsak következetességet biztosít, hanem megkönnyíti a folyamatos integrációs környezetek vagy kódkovácsoló platformok számára a jövőbeli változásokhoz való alkalmazkodást anélkül, hogy át kellene írni az egyes integrációkat.

Geometriai karbantartás, mint alapértelmezett stratégia

A korábbi verziókban a Git bevezette az úgynevezett stratégiát geometriai belül git maintenanceA nagyméretű adattárak újracsomagolási feladatainak költségeinek csökkentésére tervezett stratégia elemzi a meglévő csomagfájlokat, és olyan kombinációkat keres, amelyek az objektumok száma szerint geometriai sorozatot alkotnak, tömörítve azok tartalmát anélkül, hogy minden alkalommal teljes szemétgyűjtést kellene végrehajtani.

A Git 2.54-gyel ez a megközelítés a következővé válik: az alapértelmezett beállítás a manuális karbantartáshozAmikor fut git maintenance run A stratégia meghatározása nélkül automatikusan a geometriai megközelítést választja a rendszer, ahelyett, hogy közvetlenül a klasszikus feladathoz folyamodna. gc amely mindent egyetlen csomagba próbál csoportosítani.

A gyakorlatban ez azt jelenti A tárházak hatékonyabban karbantarthatók Ez kezdettől fogva különösen érdekes a hosszú múltra visszatekintő projektek vagy a nagy monorepozitóriumokat kezelő szervezetek számára. A geometriai stratégia inkrementális csomagokat kombinál, amikor az ésszerű, és csak egyet vesz igénybe. gc Akkor fejeződik be, amikor ténylegesen mindent egyetlen csomagfájlba fog konszolidálni. A folyamat során a commit gráf, a reflogok és más segédstruktúrák naprakészek maradnak.

Akik már beállították maintenance.strategy = geometric Nem fognak semmilyen változást észrevenni, mivel ezt a preferenciát tiszteletben tartják. És azok, akik inkább a hagyományos megközelítést részesítik előnyben, erőltetni a stratégiát gc konfigurálása maintenance.strategy = gcígy fenntartva a kompatibilitást a konzervatívabb áramlásokkal.

Interaktív és kísérleti parancsok fejlesztései

A főbb új funkciókon túl a Git 2.54 számos változtatást hoz, amelyek célja a következők: finomítsa a napi felhasználói élménytkülönösen azokban a parancsokban, amelyeket interaktívan használnak a változások kezelésére.

Finomítások a git add -py új navigációs lehetőségei között

Az interaktív mód git add -p és a kapcsolódó parancsok számos használhatósági fejlesztésen estek át. Amikor a billentyűk segítségével navigál a tömbök között J y KA Git mostantól megmutatja, hogy egy töredék korábban elfogadták vagy kihagytákelkerülve, hogy manuálisan kelljen megjegyezni minden egyes döntést.

A lehetőség is hozzáadódik --no-auto-advanceami megváltoztatja a viselkedést egy fájl egyes részeinek befejezésekor. Ahelyett, hogy automatikusan a következő fájlra ugrana, a munkamenet az aktuális fájlon marad, lehetővé téve a használatát < y > hogy nyugodtabban mozoghasson a fájlok között. Ez a munkamódszer akkor hasznos, ha a módosítások kijelölését egészében szeretné áttekinteni, mielőtt jóváhagyná őket.

git replay: nagyobb érettség a commitok újbóli végrehajtásához

A kísérleti sorrend git visszajátszásA commitok új bázison történő replikálására szolgáló, a munkafa módosítása nélküli funkció folyamatosan bővül. Ebben a verzióban mostantól a következő funkciókat is ellátja: atomikusan frissíti a hivatkozásokat Alapértelmezés szerint a parancsok kiírása helyett update-ref a normál kimeneten.

Ezenkívül tartalmaz egy módot --revert ez lehetővé teszi visszavonja a változtatásokat egy sor commitbólKépes elvetni a folyamat során üressé váló commitokat, és mostantól támogatja a történet visszajátszását a gyökér commitig. Ezek a fejlesztések jól illeszkednek a következő használatához: git history, amely ugyanarra az infrastruktúrára támaszkodik a biztonságosabb élmény érdekében.

Új opció – előzetes a git rebase-ben

Egy másik érdekes módosítás a következő hozzáadása: --trailer en git újbázisamely kihasználja a logikáját interpret-trailers mert ugyanazt a trailert add hozzá minden túllövéses commithozHosszú parancsok létrehozása helyett -x és felhívásokat tesz git commit --amend --no-edit --trailer=...A kívánt pótkocsit közvetlenül megadhatja az overrun indításakor.

Ez nagyban leegyszerűsíti az ismétlődő feladatokat, például a betűvonalak beillesztését Reviewed-by: vagy egy sor commithoz hasonló annotációk, ami gyakori a megosztott csapatokban használt formális kódellenőrzési folyamatokban.

HTTP-átvitel és aláírás-kezelés: finomított viselkedés

A hálózati kommunikáció tekintetében a Git 2.54 releváns változtatásokat vezet be a HTTP-válaszok kezelésében, valamint a commitokhoz és címkékhez kapcsolódó kriptográfiai aláírások értelmezésében.

HTTP 429 válaszkezelés és konfigurálható újrapróbálkozások

A Git HTTP-átvitele megtanulja helyesen értelmezni a kódokat 429 «Túl sok kérés»Eddig, amikor egy szerver 429-es hibát adott vissza, azt végzetes hibának tekintették, és a művelet sikertelen volt. Ettől a verziótól kezdve a Git újrapróbálkozhat a kéréssel, miközben tiszteletben tartja a fejléc értékét. Retry-After ha van ilyen, vagy egy konfigurálható késleltetés használatával az új opción keresztül http.retryAfter.

A módosításokat is hozzáadják http.maxRetries y http.maxRetryTime, amelyek lehetővé teszik szabályozza az újrapróbálkozások maximális számát és a rájuk fordított teljes időtEz praktikus vállalati környezetekben, ahol túlterhelt szerverekhez vagy szigorú kéréskorlátozó szabályzatokkal rendelkező szerverekhez kell hozzáférni, segítve a működés egyszerűsítését. fetch y push ellenállóbbnak kell lenni a szerver büntetése nélkül.

Lejárt kulcsú GPG aláírások kezelése

A biztonsággal kapcsolatban kijavítottunk egy potenciálisan félrevezető viselkedést: amikor egy commitot egy lejárt GPG-kulccsal írtak alá, a Git megjelenítette az aláírást a következő helyen: riasztó vörös színEz arra utalt, hogy az aláírás érvénytelen. Ha azonban az aláírás érvényes volt az adott időpontban, akkor annak érvényességének akkor is fenn kell maradnia, ha a kulcs azóta lejárt.

A Git 2.54 módosítja ezt a logikát, és figyelembe veszi a következőket: A kulcs lejárta előtt helyesen létrehozott aláírások érvényesek.Ez elkerüli a felesleges riasztásokat. Pontosabb képet ad a tárház történetéről, ami releváns a hosszú életciklusú projektek, például az évekig karbantartott intézményi vagy közigazgatási szoftverek esetében.

Új vizsgálati lehetőségek és előzmények testreszabása

Számos, az előzmények feltárására szolgáló parancs olyan fejlesztéseken esett át, amelyek növelik a rugalmasságukat, és lehetővé teszik az egyes esetekhez testreszabottabb kimeneteket.

A `git log -L` integrálható a standard diff gépezetekkel

A választás git log -LAz adott fájl sorainak alakulását nyomon követő függvény újra lett implementálva, hogy a kimenetét a következőn keresztül irányítsa át: szabványos Git diff mechanizmusKorábban a saját útvonalát használta, ami miatt inkompatibilis volt olyan nagyon hasznos lehetőségekkel, mint például a -S y -G (az úgynevezett "csákányok"), vagy különböző javításformátumokkal.

A Git 2.54-ben bevezetett változtatással -L kompatibilissé válik speciális tartalom- és diff formátumkeresésekideértve --word-diff o --color-movedÍgy a kimenet egy adott függvényre korlátozható, és ugyanakkor csak azokra a commitokra szűrhető, amelyek egy adott szimbólumot adnak hozzá vagy távolítanak el, ami megkönnyíti a kód auditálását és a regressziós analízist.

git blake diff algoritmus kiválasztással

A parancs hibáztasd, amely azt mutatja, hogy melyik commit vezette be a fájl minden sorát, és megtanul egy új opciót --diff-algorithmEz lehetővé teszi, hogy különböző diff algoritmusok, például hisztogram, türelem vagy minimális között válasszon a vonalhozzárendelés kiszámításakor.

A fájlon végrehajtott módosítások típusától függően Az egyik algoritmus kiválasztása a másikkal szemben világosabb eredményeket kínálhatEz csökkenti a zajt a nagy aktivitású kódelőzményekben. Azokban a környezetekben, ahol a részletes áttekintéseket nagyra értékelik, ez a szintű kontroll döntő lehet annak vizsgálatakor, hogy ki vezetett be egy adott kódblokkot.

Tárolásoptimalizálás és objektumadatbázisok

Az ebben a verzióban bekövetkezett változások nem korlátozódnak a felhasználói felületre; a Git működésén is jelentős munka történt. belsőleg rendszerezi és hozzáfér az adatokhozEz különösen jelentős hatással van a nagy adattárakra.

Inkrementális többcsomagos indexek és tömörítés

A hívások többcsomagos inkrementális indexek (MIDX)A Git 2.54 a korábbi verziókban már fejlesztett funkciókat is tartalmazza, mostantól támogatva a rétegtömörítést. Ez a mechanizmus kisebb MIDX rétegeket kombinál a hozzájuk tartozó elérhetőségi bitképekkel együtt, hogy a réteglánc mérete ésszerű maradjon.

Ez a lépés azért fontos, az inkrementális MIDX gyakorlatiassá tétele hosszú élettartamú adattárakbanpéldául nagy szervezetek vagy sokéves múltra visszatekintő közösségi projektek esetében. A rétegek tömörítése csökkenti a keresések összetettségét és javítja a teljesítményt olyan műveletekben, mint például fetch, clone részleges vagy előzményellenőrzések.

Objektumadatbázis (ODB) átstrukturálása

Belsőleg egy az objektumadatbázis API mélyreható refaktorálása (ODB). Most egy plug-and-backend kialakítást használnak, amelyben olyan funkciók, mint a read_object(), write_object() o for_each_object() Függvénymutatók segítségével kerülnek kiosztásra származás szerint.

Bár ez a változás nem azonnal látható a végfelhasználó számára, mégis megalapozza a jövőbeli alternatív tárolási háttérrendszerek vagy rugalmasabb objektumadatbázis-konfigurációk. Azon vállalatok számára, amelyeknek speciális szabályozási megfelelési követelményeik vannak, vagy integrálódniuk kell a saját tárolórendszereikkel, ez a modularitás megnyithatja az utat a testreszabottabb megoldások előtt.

Állapot, aliasok, háttérkitöltés és egyéb részletek fejlesztései

A Git 2.54 számos olyan módosítást is tartalmaz, amelyek bár kisebbek, de hozzájárulnak a mindennapi használat finomításához és a Git alkalmazkodásához a változatos nyelvi és hálózati kontextusokhoz.

a git állapota és összehasonlítása több távoli ággal

A parancs git státusz bemutatja a konfigurációs opciót status.compareBranchesAlapértelmezés szerint ez a parancs azt mutatta, hogy az aktuális ág hogyan viszonyul a beállított upstreamhez, valami tipikus dolog, mint például origin/mainAz új opcióval kérhetsz összehasonlítást a push ággal, vagy mindkettővel egyszerre.

Ez a funkció úgy van kialakítva, hogy háromszög alakú áramlások, gyakori a forkok használatakor: letölthetsz egy hivatalos távoli szerverről, és elküldheted a módosításokat egy másikra, így mindig tisztában vagy azzal, hogy hány commit választja el az egyes ágakat, ami csökkenti a meglepetéseket a tárolók szinkronizálásakor.

Álnév nemzetközi karakterekkel

Eddig a Git aliasok ASCII alfanumerikus karakterekre és kötőjelekre korlátozódtak, megakadályozva ezzel más nyelveken használt ékezetes vagy eltérő ábécés nevek használatát. Az új szintaxis gyakorlatilag bármilyen karaktert támogat, kivéve a sortöréseket és a NULL-t. Az egyeztetés nyers bájtként történik, és kis- és nagybetűérzékeny. Továbbá a shell automatikus kiegészítési rendszere frissült, hogy kezelje ezeket az aliasokat, így a Git könnyebben használható a többnyelvű csapatokban.

A Git backfill praktikusabb részleges klónokban

A kísérleti parancs git háttérkitöltésA részleges klónokban hiányzó blobok letöltésére használt parancsot is megerősítették. Korábban a parancs mindig elérhető blobokat kért le a következő helyről: HEAD az egész fában, ami különösen nagy adattárakban túlzott lehet.

A Git 2.54 támogatást ad a következőkhöz: érvek és útvonalspecifikáció áttekintéseígy a háttérkitöltés egy adott előzménytartományra korlátozható (például main~100..main) vagy bizonyos meghatározott útvonalakra (git backfill -- '*.c'), beleértve a helyettesítő karaktermintákat is. Ez sokkal könnyebbé teszi a nagyméretű részleges klónokkal való munkát, ahol csak a kód egy adott részének előzményeit kell befejezni.

Egyéb módosítások és részletes fejlesztések

A Git 2.54 változásnaplója számos apró fejlesztést tartalmaz. Ezek között van egy javítás a diff algoritmushoz. hisztogramami mostantól megakadályozza, hogy a tömörítési fázis a változáscsoportokat úgy mozgassa, hogy az megszakítsa a kiválasztott horgonyvonalakat, így tisztább és kevésbé redundáns különbségeket eredményezve.

Eszközök, mint például git config list , amely egyre inkább a konfigurációk listázásának hivatalos módjaként válik elfogadottá, git merge-file amely ezután figyelembe veszi az elérhető konfigurációt még a tárházon kívül is, valamint számos kapcsolódó segédprogramot git send-emailamelyek támogatást kapnak a klienstanúsítványokhoz és a felhasználó által kiválasztott karakterkészletek körültekintőbb kezeléséhez.

A Git fejlődése jó ütemben folytatódik a 2.54-es verzióval, amely a következőket ötvözi: látható fejlesztések a felhasználó számára, mint az új rend git history vagy konfigurálható hookok, amelyek jelentős munkát igényelnek a rendszer belső infrastruktúráján. Mindez egy robusztusabb, rugalmasabb ökoszisztéma felé mutat, amely jobban felkészült az egyre nagyobb adattárak és a sokszínűbb csapatok kihívásaira.

QtCreator 18
Kapcsolódó cikk:
A Qt Creator 18 kísérleti konténertámogatással érkezik.