The Mergiraf 0.4 buvo paskelbtas projekto leidimas, pristatantis „Git“ tvarkyklę, leidžiančią įgyvendinti trijų krypčių sujungimą. Mergiraf palaiko įvairių tipų sujungimo konfliktų sprendimą ir gali būti naudojamas su skirtingomis programavimo kalbomis ir failų formatais. Jis gali būti iškviestas atskirai, kad būtų galima išspręsti konfliktus, kylančius naudojant standartinį Git arba pakeisti numatytąją Git sujungimo tvarkyklę, siekiant pagerinti komandas, pvz. merge, revert, rebaseir cherry-pick. Kodas platinamas pagal GPLv3 licencija. Naujoji versija prideda Python, TOML, Scala ir TypeScript palaikymą, taip pat našumo optimizavimą.


Problemas išsprendė Mergiraf

Programinės įrangos kūrimas yra neįtikėtinai sudėtingos sistemos pavyzdys. Sudėtingoms sistemoms būdinga viena savybė: jas iš prigimties sunku valdyti, o norimas jų elgesys neatsiranda atsitiktinai. Vietoj to, tokios sistemos laikui bėgant tobulėja, žingsnis po žingsnio, kiekvieną pakeitimą kruopščiai išbandant. Tam reikia gerai apibrėžtos struktūros ir atitinkamų priemonių.

Bet kurios sudėtingos sistemos evoliuciją galima vizualizuoti kaip nukreiptą medį, kur šaknis reiškia tuščią savybių rinkinį, o kiekvienas mazgas, išskyrus šaknį, yra mutacijos taikymo jo pirminiam pagrindui rezultatas.

Programinės įrangos produktų kontekste kiekvienas mazgas vadinamas a versijaatstovaujantis tam tikram funkcijų ir anti-ypatybių rinkiniui. Bet koks šio rinkinio pakeitimas laikomas a mutacijasudarantis briauną nukreiptame acikliniame grafe. Šios savybės iš prigimties yra abstrakčios; jie atspindi ne fizines sistemas, o naudingumą, kurį intelektualūs agentai suvokia šiose sistemose. Norėdami šias idėjas paversti realybe, kūrėjai turi dirbti su žemo lygio detalėmis, išreikštomis programavimo kalbomis.

Momentinės nuotraukos ir pakeitimų rinkiniai

Norėdami palaipsniui patobulinti šaltinio kodą į būseną, kurioje elgsis norima, ir dokumentuoti, kaip tai pasiekiama, programuotojai naudoja momentines nuotraukas ir pakeitimų rinkiniai.

  • A momentinė nuotrauka atspindi tam tikrą gaminio būseną, užfiksuodama visas žemo lygio detales.
  • A pakeitimų rinkinys reiškia perėjimą tarp momentinių vaizdų.

Paprastai momentinės nuotraukos yra gaunamos iš atskirų pakeitimų rinkinių, todėl šie terminai dažnai vartojami pakaitomis. Tačiau yra išimčių, pvz sujungti įsipareigojimuskurie atsiranda dėl kelių perėjimų. Juos sunku valdyti ir paprastai jų vengiama.

Šiuolaikinės versijų valdymo sistemos, tokios kaip „Git“, suteikia pagrindines plėtros darbo eigos valdymo galimybes. Kūrėjai gali tvarkyti momentines nuotraukas kaip nukreiptas aciklines diagramas, komentuoti jas komentarais ir, jei reikia, pertvarkyti jų tvarką. Ši funkcija padeda kūrėjams rašyti semantiškai reikšmingas projekto istorijas, kurios yra labai svarbios derinant ir atsakant į tokius klausimus:

  • „Kodėl buvo pristatyta ši žemo lygio detalė (pvz., kintamasis)?
  • „Koks mano indėlis į šį projektą?
  • „Kas ir kada įdiegė šią funkciją?
  • „Kokie pokyčiai sukėlė šią klaidą, nors to neturėjo?

Šakos ir bendradarbiavimas

Versijų valdymo sistemos taip pat palaiko šakoskurie atspindi nenutrūkstamas projekto istorijos dalis. Kūrėjai naudoja filialus, kad:

  • Įdiekite specifines funkcijas.
  • Išbandykite kelis kandidatus.
  • Sujunkite įvairių bendraautorių rezultatus neautomatiškai nesujungdami visko kiekvieną kartą.

Įprasta darbo eiga apima a pagrindinė šaka atstovaujantys oficialų produktą, su kiekvienos funkcijos šoninėmis šakomis. Kūrėjai reguliariai sinchronizuoja šonines šakas su pagrindine šaka (idealiu atveju po kiekvieno įsipareigojimo), kad:

  • Dirbkite su naujausia produkto versija.
  • Anksti aptikkite kitų kūrėjų sukeltas problemas.

Sujungimo iššūkiai

Pakeitimų derinimas iš skirtingų momentinių nuotraukų (procesas, apimantis bendro protėvio radimą ir nuoseklų pakeitimų taikymą) gali sukelti konfliktų. Šiuolaikiniai VCS įrankiai remiasi eilutės po eilutės sujungimo algoritmaikurios apdoroja failus kaip eilučių sekas ir taiko bioinformatikos stiliaus algoritmus joms sujungti. Nors šis metodas yra paprastas ir universalus, jis turi didelių apribojimų:

  1. Turinio agnostikas: Eilutės po eilutės algoritmai nepaiso šaltinio kodo semantikos.
  2. Neatitikimai: Jie dažnai sukuria neteisingus sujungimus, todėl kūrėjai turi rankiniu būdu išspręsti konfliktus.
  3. Prastas didelių pokyčių palaikymas: Dideli ar nereikšmingi pakeitimai (pvz., kodo formatavimas) gali sugadinti šiuos algoritmus.

Kūrėjai turi atidžiai išstudijuoti abi kodo versijas, pašalinti neatitikimus ir kartais net iš naujo išnagrinėti visą projektą. Šios problemos paaštrėja, kai algoritmas neaptinka konfliktų arba sukuria neveikiantį kodą, pavyzdžiui, kai vienas kūrėjas pervardija kintamąjį, o kitas jį naudoja naujame kode.

Geresnis požiūris

Idealus sprendimas yra naudoti a semantinis modelis kodą, o ne eilutę po eilutės euristikos. Nors moksliniai tyrimai šioje srityje tęsiasi dešimtmečius, praktiniai atvirojo kodo diegimai pradėjo atsirasti tik 2010-ųjų pradžioje, daugiausia dėmesio skiriant Java.

  • GumTree: „Java“ pagrindu sukurtas įrankis, generuojantis abstrakčius šaltinio kodo pakeitimų vaizdus, ​​bet nepalaikomas pakeitimų sujungimo iš karto.
  • Difftastic: Rūdžių pagrindu sukurtas įrankis, skirtas konsolės skirtumams vizualizuoti, tačiau jam trūksta pataisų sujungimo ar pritaikymo funkcijų.

Čia įsijungia Mergirafas.


Ką Mergiraf atneša prie stalo

Mergiraf yra rūdžių pagrindu sukurtas įrankis, kuris išnaudoja Medžių prižiūrėtojas analizatorius, skirtas gramatikos analizei be konteksto. Skirtingai nuo savo pirmtakų, Mergiraf daugiausia dėmesio skiria automatiškai išsprendžia sujungimo konfliktus o ne tik vizualizuoti skirtumus.

Pagrindinės savybės

  1. Automatinis sujungimo konfliktų sprendimas:

    • Pleistrai generuoti naudoja GumTree algoritmą.
    • Pritaiko Spork algoritmą pakeitimams taikyti.
  2. Kelių kalbų palaikymas:

    • Python, TOML, Scala, TypeScript ir kt.
  3. Kompaktiškas ir efektyvus:

  4. Konflikto vizualizacija:

    • Padeda kūrėjams suprasti ir išspręsti neišspręstas problemas.

Apribojimai

  • Pleistrų serija:

    • Mergiraf dar nepalaiko pataisų nuoseklumo vėlesniam pritaikymui, nors tai gali būti įdiegta naudojant GumTree įvykių žurnalus.
  • Pasaulinis stiliaus suvokimas:

    • Trūksta visuotinių stilių palaikymo (pvz., .editorconfig), todėl jis yra mažiau veiksmingas tvarkant didelius formatavimo pakeitimus.

Pavyzdys

Atsižvelgiant į šiuos failus:

Bazinis failas (base.py)

tab_indentation = True

foo = 1

def main():
    print(foo + 2 + 3)

Pakeistas failas A (a.py)

from icecream import ic

foo = 1

def main():
    ic(foo + 2 + 3)

class Baz:
    def __init__(self):
        """Baz class"""

Pakeistas failas B (b.py)

bar = 1

def main():
    print(bar + 2 + 3)

Vykdymas

./mergiraf merge ./base.py ./a.py ./b.py -x a.py -y b.py -s base.py -o ./res.py

Rezultatas

from icecream import ic

bar = 1

def main():
    ic(bar + 2 + 3)

class Baz:
    def __init__(self):
        """Baz class"""

Ši išvestis išsprendžia sujungimo konfliktus, išlaikant abiejų šakų pakeitimus, kartu išsaugant kodo semantiką. Tačiau skirtukų ir tarpų derinys įtraukose atskleidžia, ką reikia tobulinti: Mergiraf turėtų geriau integruotis su .editorconfig ar panašias priemones, skirtas pasauliniam stiliui įgyvendinti.


Išvada

Mergiraf yra reikšmingas žingsnis į priekį sujungiant „Git“ įrankius. Naudodamas abstrakčiuosius sintaksės medžius (AST), jis suteikia kūrėjams patikimesnį būdą išspręsti konfliktus ir palaiko daugybę kalbų ir darbo eigų. Nors yra tobulintinų sričių, Mergiraf naujovės yra patrauklus pasirinkimas šiuolaikinėms programinės įrangos kūrimo darbo eigoms.

Jei tekste radote klaidą, siųskite pranešimą autoriui pažymėdami klaidą ir paspausdami Ctrl-Enter.



Source link

By admin

Draugai: - Marketingo paslaugos - Teisinės konsultacijos - Skaidrių skenavimas - Fotofilmų kūrimas - Karščiausios naujienos - Ultragarsinis tyrimas - Saulius Narbutas - Įvaizdžio kūrimas - Veidoskaita - Nuotekų valymo įrenginiai -  Padelio treniruotės - Pranešimai spaudai -