lëshimi i sistemit të distribuar të menaxhimit të kodit burimor . Git është një nga sistemet më të njohura, të besueshme dhe me performancë të lartë të menaxhimit të versioneve, duke ofruar mjete fleksibël për zhvillimin jo-lineare, që bazohen në degëzim dhe bashkim të degëve. Për të siguruar integritetin e historisë dhe qëndrueshmërinë ndaj ndryshimeve pas ngjarjeve, përdoret hashing i heshtur i gjithë historisë së mëparshme në çdo commit, si dhe është e mundur të vërtetohen nënshkrimet digjitale të zhvilluesve për etiketat dhe commit-et specifike.
Në krahasim me versionin e kaluar, në këtë version janë pranuar 745 ndryshime, përgatitur me pjesëmarrjen e 74 zhvilluesve, prej të cilëve 18 morën pjesë për herë të parë në zhvillim. :
- Një funksion i ri i disponueshëm që nga versioni 1.18 është mënyra e ri-ndërlidhjes së grumbullit të komiteteve «git rebase —rebase-merges», e cila ka zëvendësuar opsionin e vjetër «—preserve-merges», i cili tani është shënuar si të vjetruar. Operacioni «git rebase» përdoret për të zëvendësuar një seri komitetesh me një komitet të ri bazë, për shembull, për të lëvizur një degë të caktuar, në të cilën zhvillohet një veçori e re, në gjendjen aktuale të deges master, e cila përmban përmirësime të shtuar pas ndarjes:
o — o — o (my-feature)
/
o — o — o — o — o (master)
o — o — o (my-feature)
/
o — o — o — o — o (master)
Për të ruajtur strukturën e degëve në degën e ri-ndërlidhur, më parë mund të përdorej opsioni «—preserve-merges», i cili, kur ekzekutohej në modalitetin interaktiv (git rebase -i —preserve-merges), lejonte redaktimin e historisë së komiteteve, por nuk garantonte ruajtjen e plotë të strukturës së repositorios. Mënyra e re «—rebase-merges» lejon ruajtjen e strukturës së ndryshimeve në degën e ri-ndërlidhur, duke ofruar një grup të plotë operacionesh interaktive, përfshirë fshirjen, rigrupimin dhe rinimin e komiteteve.
Për shembull, «—rebase-merges» ndihmon për të ri-ngarkuar komitetet nga një degë të veçantë në një degë master më të re, duke ruajtur strukturën e degëve në degën e ri-ndërlidhur dhe duke bërë disa ndryshime në shënimet e komiteteve gjatë procesit.
- Shtuar mbështetje për krijimin e një dege të re mbi bazën e përcaktimit të bazës së bashkimit të dy degëve të tjera (merge base, përcaktimi me një paraardhës të përbashkët) duke përdorur sintaksat «git branch new A…B» dhe «git checkout -b new A…B», ku «A…B» nënkupton përcaktimin e bazës së bashkimit midis dy komiteteve të specifikuara, në përputhje me atë se si «git checkout A…B» lëviz HEAD në komitetin bazë dhe «diff A…B» tregon ndryshimet midis komitetit «B» dhe paraardhësit të përbashkët me komitetin «A».
Për shembull, gjatë punës mbi një degë my-feature, funksionaliteti i propozuar mund të përdoret kur është e nevojshme të fillohet nga një degë tjetër, për shembull, nga e njëjta pikë në degën master, nga e cila është nxjerrë dega my-feature. Më parë, për këtë duhej të shqyrtohej manualisht logu i ndryshimeve, gjë që krijonte shqetësime kur kishte një histori të madhe ndryshimesh, më pas të ekzekutohej «git merge-base master my-feature» për të llogaritur hash-in bazë të përzierjes midis degëve master dhe my-feature dhe të krijohej një degë e re në raport me paraardhësin e përbashkët «git branch my-other-feature hash». Në Git 2.22, për të krijuar një degë në raport me bazën e përzierjes së dy degëve të tjera, mund të përdoret sintaksa «git branch my-other-feature A…B»;
- Shtohet opsioni «git branch —show-current» për të shfaqur emrin e degës që është marrë gjatë operacionit checkout;
- Shtohet opsioni «git checkout —no-overlay — dir», i cili lejon që gjatë operacionit checkout të sjellë përmbajtjen e katalogut dir në një gjendje që i përkon plotësisht gjendjes së degës master. Për shembull, nëse në kopjen lokale të katalogut dir ka një skedar që mungon në degën master, ai do të lihet në përputhje me rregullat gjatë ekzekutimit të «git checkout master — dir», dhe me shenjën «—no-overlay» do të hiqet;
- Në komandën «git diff» është aktivizuar një API universale për analizimin e opsioneve, duke lejuar unifikimin e trajtimit të opsioneve me utilitetet e tjera të git. Për shembull, në «git diff» tani të gjitha opsionet kanë akses edhe tek antagonistët e tyre («—function-context» dhe «—no-function-context»);
- Shtohet mundësia e filtrimit gjatë daljes «git log» të etiketimeve të zgjeruara të bashkangjitura me komitetet («trailer» — flamuj informues shtesë, siç është Signed-off-by dhe Co-authored-by). Filtrimi i etiketimeve është i mundur si sipas çelësit ashtu edhe sipas vlerës, për shembull:
«git log —pretty=»%(trailers:key=Reviewed-by,valueonly)»; - Shtohet një mekanizëm i ri ndjekjeje Trace2, që ofron një format më fleksibël dhe të strukturuar daljeje. Trace2 lejon mbledhjen e telemetrisë mbi operacionet e kryera dhe të dhënat e performancës për një analizë dhe debug më të detajuar (gunxhimi caktohet nga përdoruesi, asnjë të dhënë nuk dërgohet jashtë);
- Raporti «git bisect» është bërë më i lexueshëm, në të cilin tani dallohet më qartë komitet problematik dhe shfaqen statistika përmbledhëse mbi ndryshimet për çdo skedar (në nivelin e numrit të rreshtave të ndryshuar);
- Heuristika për përcaktimin e rinovimeve të katalogëve është ripërdorur për të eliminuar caktimin e rremë të etiketave. Në rast dyshimi, këto katalogë tani shënohen si konfliktuese;
- U sigurua një paralajmërim kur përpiqet të vendosë një etiketë mbi një etiketë tjetër, e cila zakonisht bëhet gabimisht dhe mund të çojë në vendosjen e etiketës jo mbi commit-in e duhur (p.sh., konstrukti si «git tag -f -m «mesazh i përditësuar» my-tag1 my-tag2» do të krijojë një etiketë mbi etiketën e vjetër, ndërsa zhvilluesi priste që etiketa e re të vendosej mbi commit-in që tregon etiketën e vjetër);
- U aktivizua gjenerimi për repositorët e bitëve të hartës (struktura diskore «reachability bitmaps»), që ruajnë të dhënat mbi sete objektesh, të disponueshme për çdo commit, dhe lejojnë përcaktimin e shpejtë të pranisë së objektit bazë. Kjo strukturë ndjeshëm redukton kohën e ekzekutimit të operacioneve të ekstraktimit të të dhënave (git fetch).
Burimi: opennet.ru
