Kutolewa kwa mfumo wa udhibiti wa chanzo uliosambazwa Git 2.22

Iliyowasilishwa na kutolewa kwa mfumo wa udhibiti wa chanzo uliosambazwa Git 2.22.0. Git ni mojawapo ya mifumo maarufu zaidi, inayotegemewa na yenye utendakazi wa hali ya juu ya udhibiti wa toleo, ikitoa zana rahisi za ukuzaji zisizo za mstari kulingana na matawi na kuunganisha. Ili kuhakikisha uadilifu wa historia na upinzani dhidi ya mabadiliko yanayorudiwa nyuma, hashing isiyo wazi ya historia nzima ya awali katika kila ahadi inatumika, na inawezekana pia kuthibitisha lebo za kibinafsi na ahadi kwa saini za dijiti za wasanidi programu.

Ikilinganishwa na toleo la awali, toleo jipya lilijumuisha mabadiliko 745, yaliyotayarishwa na ushiriki wa watengenezaji 74, ambao 18 walishiriki katika maendeleo kwa mara ya kwanza. kuu ubunifu:

  • Inapatikana tangu kutolewa 1.18, hali mpya ya kuweka upya ahadi "git rebase --rebase-meges" inachukua nafasi ya chaguo la zamani la "--preserve-merge", ambalo sasa limeacha kutumika. Operesheni ya "git rebase" inatumika kuchukua nafasi ya safu ya ahadi na ahadi mpya ya msingi, kwa mfano, kusonga tawi tofauti ambalo linakuza kipengele kipya kwa hali ya sasa ya tawi kuu, ambayo ni pamoja na marekebisho yaliyoongezwa baada ya tawi. :

    o - o - o (kipengele changu)

    /

    o - o - o - o - o (bwana)

    o - o - o (kipengele changu)

    /

    o - o - o - o - o (bwana)

    Ili kuhifadhi muundo wa tawi katika tawi lililohamishwa, chaguo la "--preserve-merge" lingeweza kutumika hapo awali, ambalo, linapoendeshwa katika hali ya maingiliano (git rebase -i --preserve-merge), iliruhusu kuhariri historia ya ahadi, lakini. haikuhakikisha uhifadhi kamili wa muundo wa hazina. Hali mpya ya "--rebase-merges" inakuruhusu kuhifadhi muundo wa mabadiliko katika tawi linalohamishwa, huku ukitoa anuwai kamili ya shughuli shirikishi, ikijumuisha kufuta, kupanga upya na kubadilisha ahadi.

    Kwa mfano, "--rebase-meges" inaruhusu upakiaji upya ahadi kutoka kwa tawi tofauti hadi tawi kuu jipya zaidi, huku ukidumisha muundo wa tawi kwenye tawi lililohamishwa, na kufanya mabadiliko kadhaa kwa maelezo ya ahadi kwenye nzi.

  • Usaidizi ulioongezwa wa kuunda tawi jipya kulingana na matokeo ya kuamua msingi wa kuunganisha wa matawi mengine mawili (unganisha msingi, kumfunga babu moja) kwa kutumia miundo "git branch new A...B" na "git checkout -b new A...B”, ambamo "A ...B" inahusisha kufafanua msingi wa kuunganisha kati ya ahadi mbili zilizobainishwa, sawa na jinsi "git checkout A...B" huhamisha HEAD kwa ahadi ya msingi na "diff A. ..B" inaonyesha mabadiliko kati ya ahadi "B" na sawa na ahadi "A" "Ancestor.

    Kwa mfano, wakati wa kufanya kazi kwenye tawi tofauti la kipengele changu, kipengele hiki kinaweza kutumika unapotaka kuanza kutoka kwa tawi tofauti, kwa mfano, kutoka sehemu moja katika tawi kuu ambalo tawi la kipengele changu liliangaliwa. Hapo awali, hii ilihitaji kuchunguza mwenyewe logi ya mabadiliko, ambayo haikuwa rahisi ikiwa ulikuwa na historia kubwa ya mabadiliko, kisha kuendesha "git merge-base master my-feature" ili kukokotoa heshi ya msingi wa kuunganisha kati ya tawi kuu na kipengele changu. na kuunda tawi jipya linalohusiana na babu wa kawaida " git branch my-other-feature hash." Kwenye Git 2.22, unaweza kutumia syntax "git branch my-other-feature A...B" kuunda tawi linalohusiana na msingi wa kuunganisha wa matawi mengine mawili;

  • Imeongeza chaguo la "git branch --show-current" ili kuonyesha jina la tawi lililopatikana wakati wa operesheni ya kulipa;
  • Imeongeza chaguo la "git checkout -no-overlay - dir", ambayo inaruhusu, wakati wa kufanya operesheni ya kulipa, kuleta yaliyomo kwenye saraka ya dir kwa fomu inayolingana kikamilifu na hali ya tawi kuu. Kwa mfano, ikiwa kuna faili kwenye nakala ya ndani ya saraka ya dir ambayo haiko kwenye tawi kuu, basi kwa chaguo-msingi wakati wa kutekeleza "git Checkout master - dir" itaachwa, na ikiwa "--no-overlay" ” chaguo limebainishwa, litafutwa;
  • Amri ya "git diff" hutumia API ya ulimwengu kwa chaguzi za kuchanganua, ambayo inafanya uwezekano wa kuunganisha utunzaji wa chaguo na huduma zingine za git. Kwa mfano, katika β€œgit diff”, chaguo zote sasa zina wapinzani wao (β€œ--function-context” na β€œ--no-function-context”);
  • Imeongeza uwezo wa kuchuja lebo zilizopanuliwa zilizoambatishwa kwa ahadi katika towe la "git log" ("trela" - alama za maelezo ya ziada, kama vile Kusainiwa-na na Kuidhinishwa kwa pamoja). Inawezekana kuchuja lebo kwa ufunguo na thamani, kwa mfano:
    "git log --pretty="%(trailers:key=Imepitiwa-na,valueonly)";

  • Injini mpya ya kufuatilia, Trace2, imeongezwa, ikitoa umbizo la matokeo linalonyumbulika zaidi na lenye muundo. Trace2 inakuruhusu kukusanya telemetry kuhusu shughuli zilizotekelezwa na data ya utendakazi kwa uchanganuzi wa kina na utatuzi (kidhibiti kinatumwa na mtumiaji, hakuna data inayotumwa nje);
  • Ripoti ya "git bisect" imefanywa kusomeka zaidi, ambapo ahadi zenye matatizo sasa zimeangaziwa kwa uwazi zaidi na takwimu za muhtasari wa mabadiliko kwa kila faili huonyeshwa (katika kiwango cha idadi ya mistari iliyobadilishwa);
  • Heuristics ya kuamua ubadilishanaji wa majina ya saraka imefanyiwa kazi upya ili kuondoa usakinishaji wa uwongo wa kubadilisha lebo. Wakati kuna shaka, saraka kama hizo sasa zimetiwa alama kuwa zinakinzana;
  • Onyo huonyeshwa unapojaribu kusakinisha lebo kwenye lebo nyingine, ambayo kwa kawaida hufanywa kimakosa na inaweza kusababisha kuweka lebo kwenye ahadi isiyo sahihi (kwa mfano, muundo kama vile β€œgit tag -f -m β€œujumbe uliosasishwa” my-tag1 my- tag2β€³ itasababisha lebo kuundwa kwenye tagi ya zamani, ilhali msanidi alitarajia lebo mpya kusakinishwa kwenye ahadi iliyoelekezwa na lebo ya zamani);
  • Uzalishaji umewezeshwa kwa hazina za bitmap (muundo wa "upatikanaji wa data kwenye diski"), ambao huhifadhi data kuhusu seti za vitu vinavyopatikana kwa kila ahadi na hukuruhusu kubaini haraka uwepo wa kitu cha msingi. Muundo huu kwa kiasi kikubwa hupunguza muda wa utekelezaji wa shughuli za kurejesha data (git fetch).

Chanzo: opennet.ru

Kuongeza maoni