{"id":1215,"date":"2024-12-15T04:03:22","date_gmt":"2024-12-15T04:03:22","guid":{"rendered":"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/"},"modified":"2024-12-15T04:03:22","modified_gmt":"2024-12-15T04:03:22","slug":"mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git","status":"publish","type":"post","link":"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/","title":{"rendered":"Mergiraf \u2013 \u012f AST orientuotas \u012frankis trij\u0173 kryp\u010di\u0173 sujungimui Git"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div id=\"\">\n<p>The <strong>Mergiraf 0.4<\/strong> buvo paskelbtas projekto leidimas, pristatantis \u201eGit\u201c tvarkykl\u0119, leid\u017eian\u010di\u0105 \u012fgyvendinti trij\u0173 kryp\u010di\u0173 sujungim\u0105. Mergiraf palaiko \u012fvairi\u0173 tip\u0173 sujungimo konflikt\u0173 sprendim\u0105 ir gali b\u016bti naudojamas su skirtingomis programavimo kalbomis ir fail\u0173 formatais. Jis gali b\u016bti i\u0161kviestas atskirai, kad b\u016bt\u0173 galima i\u0161spr\u0119sti konfliktus, kylan\u010dius naudojant standartin\u012f Git arba pakeisti numatyt\u0105j\u0105 Git sujungimo tvarkykl\u0119, siekiant pagerinti komandas, pvz. <code>merge<\/code>, <code>revert<\/code>, <code>rebase<\/code>ir <code>cherry-pick<\/code>. Kodas platinamas pagal <strong>GPLv3 licencija<\/strong>. Naujoji versija prideda Python, TOML, Scala ir TypeScript palaikym\u0105, taip pat na\u0161umo optimizavim\u0105.<\/p>\n<hr\/>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Turinys:<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Problemas_issprende_Mergiraf\" >Problemas i\u0161sprend\u0117 Mergiraf<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Momentines_nuotraukos_ir_pakeitimu_rinkiniai\" >Momentin\u0117s nuotraukos ir pakeitim\u0173 rinkiniai<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Sakos_ir_bendradarbiavimas\" >\u0160akos ir bendradarbiavimas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Sujungimo_issukiai\" >Sujungimo i\u0161\u0161\u016bkiai<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Geresnis_poziuris\" >Geresnis po\u017ei\u016bris<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Ka_Mergiraf_atnesa_prie_stalo\" >K\u0105 Mergiraf atne\u0161a prie stalo<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Pagrindines_savybes\" >Pagrindin\u0117s savyb\u0117s<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Apribojimai\" >Apribojimai<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Pavyzdys\" >Pavyzdys<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Bazinis_failas_basepy\" >Bazinis failas (base.py)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Pakeistas_failas_A_apy\" >Pakeistas failas A (a.py)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Pakeistas_failas_B_bpy\" >Pakeistas failas B (b.py)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Vykdymas\" >Vykdymas<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Rezultatas\" >Rezultatas<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/15\/mergiraf-i-ast-orientuotas-irankis-triju-krypciu-sujungimui-git\/#Isvada\" >I\u0161vada<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Problemas_issprende_Mergiraf\"><\/span>Problemas i\u0161sprend\u0117 Mergiraf<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Programin\u0117s \u012frangos k\u016brimas yra ne\u012ftik\u0117tinai sud\u0117tingos sistemos pavyzdys. Sud\u0117tingoms sistemoms b\u016bdinga viena savyb\u0117: jas i\u0161 prigimties sunku valdyti, o norimas j\u0173 elgesys neatsiranda atsitiktinai. Vietoj to, tokios sistemos laikui b\u0117gant tobul\u0117ja, \u017eingsnis po \u017eingsnio, kiekvien\u0105 pakeitim\u0105 kruop\u0161\u010diai i\u0161bandant. Tam reikia gerai apibr\u0117\u017etos strukt\u016bros ir atitinkam\u0173 priemoni\u0173.<\/p>\n<p>Bet kurios sud\u0117tingos sistemos evoliucij\u0105 galima vizualizuoti kaip nukreipt\u0105 med\u012f, kur \u0161aknis rei\u0161kia tu\u0161\u010di\u0105 savybi\u0173 rinkin\u012f, o kiekvienas mazgas, i\u0161skyrus \u0161akn\u012f, yra mutacijos taikymo jo pirminiam pagrindui rezultatas.<\/p>\n<p>Programin\u0117s \u012frangos produkt\u0173 kontekste kiekvienas mazgas vadinamas a <strong>versija<\/strong>atstovaujantis tam tikram funkcij\u0173 ir anti-ypatybi\u0173 rinkiniui. Bet koks \u0161io rinkinio pakeitimas laikomas a <strong>mutacija<\/strong>sudarantis briaun\u0105 nukreiptame acikliniame grafe. \u0160ios savyb\u0117s i\u0161 prigimties yra abstrak\u010dios; jie atspindi ne fizines sistemas, o naudingum\u0105, kur\u012f intelektual\u016bs agentai suvokia \u0161iose sistemose. Nor\u0117dami \u0161ias id\u0117jas paversti realybe, k\u016br\u0117jai turi dirbti su \u017eemo lygio detal\u0117mis, i\u0161reik\u0161tomis programavimo kalbomis.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Momentines_nuotraukos_ir_pakeitimu_rinkiniai\"><\/span>Momentin\u0117s nuotraukos ir pakeitim\u0173 rinkiniai<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Nor\u0117dami palaipsniui patobulinti \u0161altinio kod\u0105 \u012f b\u016bsen\u0105, kurioje elgsis norima, ir dokumentuoti, kaip tai pasiekiama, programuotojai naudoja <strong>momentines nuotraukas<\/strong> ir <strong>pakeitim\u0173 rinkiniai<\/strong>.<\/p>\n<ul>\n<li>A <strong>momentin\u0117 nuotrauka<\/strong> atspindi tam tikr\u0105 gaminio b\u016bsen\u0105, u\u017efiksuodama visas \u017eemo lygio detales.<\/li>\n<li>A <strong>pakeitim\u0173 rinkinys<\/strong> rei\u0161kia per\u0117jim\u0105 tarp momentini\u0173 vaizd\u0173.<\/li>\n<\/ul>\n<p>Paprastai momentin\u0117s nuotraukos yra gaunamos i\u0161 atskir\u0173 pakeitim\u0173 rinkini\u0173, tod\u0117l \u0161ie terminai da\u017enai vartojami pakaitomis. Ta\u010diau yra i\u0161im\u010di\u0173, pvz <strong>sujungti \u012fsipareigojimus<\/strong>kurie atsiranda d\u0117l keli\u0173 per\u0117jim\u0173. Juos sunku valdyti ir paprastai j\u0173 vengiama.<\/p>\n<p>\u0160iuolaikin\u0117s versij\u0173 valdymo sistemos, tokios kaip \u201eGit\u201c, suteikia pagrindines pl\u0117tros darbo eigos valdymo galimybes. K\u016br\u0117jai gali tvarkyti momentines nuotraukas kaip nukreiptas aciklines diagramas, komentuoti jas komentarais ir, jei reikia, pertvarkyti j\u0173 tvark\u0105. \u0160i funkcija padeda k\u016br\u0117jams ra\u0161yti semanti\u0161kai reik\u0161mingas projekto istorijas, kurios yra labai svarbios derinant ir atsakant \u012f tokius klausimus:<\/p>\n<ul>\n<li>\u201eKod\u0117l buvo pristatyta \u0161i \u017eemo lygio detal\u0117 (pvz., kintamasis)?<\/li>\n<li>\u201eKoks mano ind\u0117lis \u012f \u0161\u012f projekt\u0105?<\/li>\n<li>\u201eKas ir kada \u012fdieg\u0117 \u0161i\u0105 funkcij\u0105?<\/li>\n<li>\u201eKokie poky\u010diai suk\u0117l\u0117 \u0161i\u0105 klaid\u0105, nors to netur\u0117jo?<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Sakos_ir_bendradarbiavimas\"><\/span>\u0160akos ir bendradarbiavimas<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Versij\u0173 valdymo sistemos taip pat palaiko <strong>\u0161akos<\/strong>kurie atspindi nenutr\u016bkstamas projekto istorijos dalis. K\u016br\u0117jai naudoja filialus, kad:<\/p>\n<ul>\n<li>\u012ediekite specifines funkcijas.<\/li>\n<li>I\u0161bandykite kelis kandidatus.<\/li>\n<li>Sujunkite \u012fvairi\u0173 bendraautori\u0173 rezultatus neautomati\u0161kai nesujungdami visko kiekvien\u0105 kart\u0105.<\/li>\n<\/ul>\n<p>\u012eprasta darbo eiga apima a <strong>pagrindin\u0117 \u0161aka<\/strong> atstovaujantys oficial\u0173 produkt\u0105, su kiekvienos funkcijos \u0161onin\u0117mis \u0161akomis. K\u016br\u0117jai reguliariai sinchronizuoja \u0161onines \u0161akas su pagrindine \u0161aka (idealiu atveju po kiekvieno \u012fsipareigojimo), kad:<\/p>\n<ul>\n<li>Dirbkite su naujausia produkto versija.<\/li>\n<li>Anksti aptikkite kit\u0173 k\u016br\u0117j\u0173 sukeltas problemas.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Sujungimo_issukiai\"><\/span>Sujungimo i\u0161\u0161\u016bkiai<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Pakeitim\u0173 derinimas i\u0161 skirting\u0173 momentini\u0173 nuotrauk\u0173 (procesas, apimantis bendro prot\u0117vio radim\u0105 ir nuosekl\u0173 pakeitim\u0173 taikym\u0105) gali sukelti konflikt\u0173. \u0160iuolaikiniai VCS \u012frankiai remiasi <strong>eilut\u0117s po eilut\u0117s sujungimo algoritmai<\/strong>kurios apdoroja failus kaip eilu\u010di\u0173 sekas ir taiko bioinformatikos stiliaus algoritmus joms sujungti. Nors \u0161is metodas yra paprastas ir universalus, jis turi dideli\u0173 apribojim\u0173:<\/p>\n<ol>\n<li>\n<strong>Turinio agnostikas:<\/strong> Eilut\u0117s po eilut\u0117s algoritmai nepaiso \u0161altinio kodo semantikos.<\/li>\n<li>\n<strong>Neatitikimai:<\/strong> Jie da\u017enai sukuria neteisingus sujungimus, tod\u0117l k\u016br\u0117jai turi rankiniu b\u016bdu i\u0161spr\u0119sti konfliktus.<\/li>\n<li>\n<strong>Prastas dideli\u0173 poky\u010di\u0173 palaikymas:<\/strong> Dideli ar nereik\u0161mingi pakeitimai (pvz., kodo formatavimas) gali sugadinti \u0161iuos algoritmus.<\/li>\n<\/ol>\n<p>K\u016br\u0117jai turi atid\u017eiai i\u0161studijuoti abi kodo versijas, pa\u0161alinti neatitikimus ir kartais net i\u0161 naujo i\u0161nagrin\u0117ti vis\u0105 projekt\u0105. \u0160ios problemos paa\u0161tr\u0117ja, kai algoritmas neaptinka konflikt\u0173 arba sukuria neveikiant\u012f kod\u0105, pavyzd\u017eiui, kai vienas k\u016br\u0117jas pervardija kintam\u0105j\u012f, o kitas j\u012f naudoja naujame kode.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Geresnis_poziuris\"><\/span>Geresnis po\u017ei\u016bris<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Idealus sprendimas yra naudoti a <strong>semantinis modelis<\/strong> kod\u0105, o ne eilut\u0119 po eilut\u0117s euristikos. Nors moksliniai tyrimai \u0161ioje srityje t\u0119siasi de\u0161imtme\u010dius, praktiniai atvirojo kodo diegimai prad\u0117jo atsirasti tik 2010-\u0173j\u0173 prad\u017eioje, daugiausia d\u0117mesio skiriant Java.<\/p>\n<ul>\n<li>\n<strong>GumTree:<\/strong> \u201eJava\u201c pagrindu sukurtas \u012frankis, generuojantis abstrak\u010dius \u0161altinio kodo pakeitim\u0173 vaizdus, \u200b\u200bbet nepalaikomas pakeitim\u0173 sujungimo i\u0161 karto.<\/li>\n<li>\n<strong>Difftastic:<\/strong> R\u016bd\u017ei\u0173 pagrindu sukurtas \u012frankis, skirtas konsol\u0117s skirtumams vizualizuoti, ta\u010diau jam tr\u016bksta patais\u0173 sujungimo ar pritaikymo funkcij\u0173.<\/li>\n<\/ul>\n<p>\u010cia \u012fsijungia Mergirafas.<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"Ka_Mergiraf_atnesa_prie_stalo\"><\/span>K\u0105 Mergiraf atne\u0161a prie stalo<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Mergiraf yra r\u016bd\u017ei\u0173 pagrindu sukurtas \u012frankis, kuris i\u0161naudoja <strong>Med\u017ei\u0173 pri\u017ei\u016br\u0117tojas<\/strong> analizatorius, skirtas gramatikos analizei be konteksto. Skirtingai nuo savo pirmtak\u0173, Mergiraf daugiausia d\u0117mesio skiria <strong>automati\u0161kai i\u0161sprend\u017eia sujungimo konfliktus<\/strong> o ne tik vizualizuoti skirtumus.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Pagrindines_savybes\"><\/span>Pagrindin\u0117s savyb\u0117s<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li>\n<strong>Automatinis sujungimo konflikt\u0173 sprendimas:<\/strong><\/p>\n<ul>\n<li>Pleistrai generuoti naudoja GumTree algoritm\u0105.<\/li>\n<li>Pritaiko Spork algoritm\u0105 pakeitimams taikyti.<\/li>\n<\/ul>\n<\/li>\n<li>\n<strong>Keli\u0173 kalb\u0173 palaikymas:<\/strong><\/p>\n<ul>\n<li>Python, TOML, Scala, TypeScript ir kt.<\/li>\n<\/ul>\n<\/li>\n<li>\n<strong>Kompakti\u0161kas ir efektyvus:<\/strong><\/p>\n<\/li>\n<li>\n<strong>Konflikto vizualizacija:<\/strong><\/p>\n<ul>\n<li>Padeda k\u016br\u0117jams suprasti ir i\u0161spr\u0119sti nei\u0161spr\u0119stas problemas.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"Apribojimai\"><\/span>Apribojimai<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\n<strong>Pleistr\u0173 serija:<\/strong><\/p>\n<ul>\n<li>Mergiraf dar nepalaiko patais\u0173 nuoseklumo v\u0117lesniam pritaikymui, nors tai gali b\u016bti \u012fdiegta naudojant GumTree \u012fvyki\u0173 \u017eurnalus.<\/li>\n<\/ul>\n<\/li>\n<li>\n<strong>Pasaulinis stiliaus suvokimas:<\/strong><\/p>\n<ul>\n<li>Tr\u016bksta visuotini\u0173 stili\u0173 palaikymo (pvz., <code>.editorconfig<\/code>), tod\u0117l jis yra ma\u017eiau veiksmingas tvarkant didelius formatavimo pakeitimus.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Pavyzdys\"><\/span>Pavyzdys<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Atsi\u017evelgiant \u012f \u0161iuos failus:<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Bazinis_failas_basepy\"><\/span>Bazinis failas (<code>base.py<\/code>)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<pre><code class=\"language-python\">tab_indentation = True\n\nfoo = 1\n\ndef main():\n    print(foo + 2 + 3)\n<\/code><\/pre>\n<h4><span class=\"ez-toc-section\" id=\"Pakeistas_failas_A_apy\"><\/span>Pakeistas failas A (<code>a.py<\/code>)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<pre><code class=\"language-python\">from icecream import ic\n\nfoo = 1\n\ndef main():\n    ic(foo + 2 + 3)\n\nclass Baz:\n    def __init__(self):\n        \"\"\"Baz class\"\"\"\n<\/code><\/pre>\n<h4><span class=\"ez-toc-section\" id=\"Pakeistas_failas_B_bpy\"><\/span>Pakeistas failas B (<code>b.py<\/code>)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<pre><code class=\"language-python\">bar = 1\n\ndef main():\n    print(bar + 2 + 3)\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Vykdymas\"><\/span>Vykdymas<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<pre><code class=\"language-bash\">.\/mergiraf merge .\/base.py .\/a.py .\/b.py -x a.py -y b.py -s base.py -o .\/res.py\n<\/code><\/pre>\n<h4><span class=\"ez-toc-section\" id=\"Rezultatas\"><\/span>Rezultatas<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<pre><code class=\"language-python\">from icecream import ic\n\nbar = 1\n\ndef main():\n    ic(bar + 2 + 3)\n\nclass Baz:\n    def __init__(self):\n        \"\"\"Baz class\"\"\"\n<\/code><\/pre>\n<p>\u0160i i\u0161vestis i\u0161sprend\u017eia sujungimo konfliktus, i\u0161laikant abiej\u0173 \u0161ak\u0173 pakeitimus, kartu i\u0161saugant kodo semantik\u0105. Ta\u010diau skirtuk\u0173 ir tarp\u0173 derinys \u012ftraukose atskleid\u017eia, k\u0105 reikia tobulinti: Mergiraf tur\u0117t\u0173 geriau integruotis su <code>.editorconfig<\/code> ar pana\u0161ias priemones, skirtas pasauliniam stiliui \u012fgyvendinti.<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"Isvada\"><\/span>I\u0161vada<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Mergiraf yra reik\u0161mingas \u017eingsnis \u012f priek\u012f sujungiant \u201eGit\u201c \u012frankius. Naudodamas abstrak\u010diuosius sintaks\u0117s med\u017eius (AST), jis suteikia k\u016br\u0117jams patikimesn\u012f b\u016bd\u0105 i\u0161spr\u0119sti konfliktus ir palaiko daugyb\u0119 kalb\u0173 ir darbo eig\u0173. Nors yra tobulintin\u0173 sri\u010di\u0173, Mergiraf naujov\u0117s yra patrauklus pasirinkimas \u0161iuolaikin\u0117ms programin\u0117s \u012frangos k\u016brimo darbo eigoms.<\/p>\n<\/p><\/div>\n<p>Jei tekste radote klaid\u0105, si\u0173skite prane\u0161im\u0105 autoriui pa\u017eym\u0117dami klaid\u0105 ir paspausdami Ctrl-Enter.<\/p>\n<p><br \/>\n<br \/><a href=\"https:\/\/techplanet.today\/post\/mergiraf-ast-oriented-tool-for-three-way-merging-in-git\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Mergiraf 0.4 buvo paskelbtas projekto leidimas, pristatantis \u201eGit\u201c tvarkykl\u0119, leid\u017eian\u010di\u0105 \u012fgyvendinti trij\u0173 kryp\u010di\u0173 sujungim\u0105. Mergiraf palaiko \u012fvairi\u0173 tip\u0173 sujungimo konflikt\u0173 sprendim\u0105 ir gali b\u016bti naudojamas su skirtingomis programavimo kalbomis ir fail\u0173 formatais. Jis gali b\u016bti i\u0161kviestas atskirai, kad b\u016bt\u0173 galima i\u0161spr\u0119sti konfliktus, kylan\u010dius naudojant standartin\u012f Git arba pakeisti numatyt\u0105j\u0105 Git sujungimo tvarkykl\u0119, siekiant pagerinti [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1216,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3],"tags":[2329,2334,289,2332,2328,2330,2333,2331],"class_list":["post-1215","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technologijos","tag-ast","tag-git","tag-irankis","tag-krypciu","tag-mergiraf","tag-orientuotas","tag-sujungimui","tag-triju"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/posts\/1215","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/comments?post=1215"}],"version-history":[{"count":0,"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/posts\/1215\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/media\/1216"}],"wp:attachment":[{"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/media?parent=1215"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/categories?post=1215"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/tags?post=1215"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}