Přejít k obsahu

Merql

Čisté třícestné sloučení databází v PHP s řešením konfliktů na úrovni sloupců. Sémantika sloučení ve stylu Git aplikovaná na tabulky MySQL a SQLite.

Terminál
composer require merql/merql

Nejnovější vydání v0.4.1 MIT PHP 8.2+

V praxi

Sloučení načte tři uložené snímky a vrátí operace k zápisu i konflikty k vyřešení.

Sloučte tři snímky

Pořiďte snímek základu před rozdělením obou kopií, pak vytvořte snímek každé strany, například živé databáze a její kopie v sandboxu. ThreeWayMerge porovná obě strany se základem a sloučí jejich sady změn.

Na kartě výsledku naše strana upravila content a jejich strana upravila title a status téhož řádku, takže sloučení zachová všechny tři úpravy bez konfliktu.

PHP
use Merql\Merge\ThreeWayMerge;

$merge = new ThreeWayMerge();
$result = $merge->merge($base, $ours, $theirs);

echo $result->operationCount(); // resolved operations
echo $result->conflictCount();  // unresolved conflicts

Třícestné sloučení

Základní verze, naše, jejich. Třícestné slučování ve stylu git nad klíčovanými řádky a sloupci místo řádků textu. Zjišťuje vložení, aktualizace a odstranění napříč dvěma větvemi.

Řešení na úrovni sloupců

Když obě strany změní stejný řádek, merql porovná jednotlivé sloupce. Konflikt nastane jen tehdy, když se stejný sloupec změní na různé hodnoty.

Volitelné sloučení buněk

Předejte ThreeWayMerge konfiguraci CellMergeConfig a sloupce TEXT se sloučí po řádcích pomocí Myersova diffu, sloupce JSON podle klíčů. Fasáda Merql ani CLI tuto funkci nezapínají.

Více databází

Vyměnitelné adaptéry připojení a ovladače dialektů, s vestavěnou podporou MySQL a SQLite.

Detekce konfliktů

Aktualizace proti aktualizaci, aktualizace proti odstranění, odstranění proti aktualizaci a vložení proti vložení; každý konflikt je uveden spolu s tabulkou a řádkem. U konfliktů mezi aktualizacemi je uveden i sloupec.

Generování SQL

Parametrizované příkazy INSERT, UPDATE a DELETE s pořadím zohledňujícím cizí klíče. Náhled nanečisto nebo použití v transakci.

CLI

Pořizujte snímky, porovnávejte je a slučujte z příkazového řádku. Podporuje MySQL a SQLite prostřednictvím proměnných prostředí.

Otestováno

32 regresních scénářů s ručně napsanými očekávanými výsledky (composer test:oracle). CI spouští 231 jednotkové a integrační testy a PHPStan na úrovni 10.

Proč Merql

Snímky jsou soubory

Každý snímek je soubor JSON, který můžete kopírovat mezi počítači nebo uložit do správy verzí. Porovnání i sloučení čtou tyto soubory, takže nevyžadují připojení k databázi.

Než začnete zapisovat, vše zkontrolujte

Plán sloučení přidělí každé operaci a skupině změn stabilní ID a uchová řádky základu, naší strany, jejich strany i výsledku. Vyberte požadované skupiny a použijte jen ty.

Zastaralé plány se zastaví

Chráněné použití zapisuje pouze do řádků, které stále odpovídají zkontrolovanému snímku. Pokud příkaz ovlivní nula řádků, transakce se vrátí zpět a výsledek obsahuje chybu.

Vrácení změn s kontrolou odchylek

Vytvořte plán vrácení změn z živých řádků těsně před zápisem a uložte jej jako JSON. Před vrácením změn kontrola odchylek porovná otisky řádků a vrátí operace pro řádky, které se od té doby změnily.

Srovnání

Merql slučuje data řádků ze tří snímků. Tyto nástroje verzují, synchronizují nebo migrují databáze, což jsou související úlohy.

Merql ve srovnání s ostatními nástroji
Dolt Vhodné proDolt je databáze SQL, kterou můžete rozvětvovat, klonovat, vytvářet v ní větve, slučovat je, odesílat a stahovat změny jako v repozitáři Git. Připojujete se k ní jako k jakékoli databázi MySQL a sleduje původ každé buňky. Rozdíl oproti MerqlMerql zachovává databázi MySQL nebo SQLite, kterou už používáte. Ukládá tabulky do souborů snímků JSON a slučuje tři z nich; základní snímek vybíráte vy.
pt-table-sync Vhodné propt-table-sync vyhledává a opravuje rozdíly mezi tabulkami MySQL jedním směrem nebo oběma směry mezi servery. Při synchronizaci repliky provádí změny na zdroji replikace. Rozdíl oproti MerqlPři obousměrné synchronizaci pt-table-sync vybere vítězný řádek podle konfliktního sloupce a zkopíruje jeho hodnoty. Merql porovnává obě strany se společným základem, slučuje úpravy různých sloupců téhož řádku a neslučitelné změny hlásí jako konflikty k vyřešení.
sqldiff Vhodné prosqldiff porovnává dvě databáze SQLite a vypíše skript SQL, který převede první na druhou. Může také zapsat binární sadu změn pro rozšíření relace SQLite nebo shrnout změněné řádky podle tabulek. Rozdíl oproti MerqlObousměrný rozdíl neukáže, zda jedna strana přidala řádek, nebo jej druhá odstranila. Merql k tomu přidává základní snímek, slučuje dvě sady změn a funguje také s MySQL.
Doctrine Migrations Vhodné proDoctrine Migrations verzují schéma databáze, takže změny schématu lze zkontrolovat a otestovat před nasazením do produkčního prostředí. Rozdíl oproti MerqlMerql není nástroj pro migraci schématu. Slučuje data řádků a hlásí sloupce přidané nebo odebrané mezi snímky; změnu schématu ponechává na vás.

Otázky a odpovědi

Stručné odpovědi z dokumentace Merql.

Postupujte podle průvodce od prvního snímku přes plány sloučení a chráněné použití až po vrácení změn.