Mercurial je výborný distribuovaný verzovací systém (DVCS). Je free a má spoustu zajímavých vlastností. Perforce (P4) je centralizovaný verzovací systém. Má převážně komerční licenci a výborné nástroje na mergování a branchování. Co můžou mít tyto dva systémy společného?
Podle toho, kolik parametrů se zadá na příkazové řádce, se spustí buď diff (2 parametry), nebo merge (3-4 parametry). Každý parametr je cesta k porovnávanému souboru.
P4Merge sice není open source, ale je free, takže nic nebrání jeho zakomponování do jiného nástroje.
P4Merge
P4Merge je grafický nástroj pro merge a diff. Je jednou ze silných zbraní P4. Já jsem ho vždycky rád používal. Jeho výhodou je, že akceptuje parametry z příkazové řádky, takže jej lze použít i mimo rámec P4 a to buď úplně samostatně, nebo jako externí nástroj z jiné aplikace. Třeba Mercurialu :-)Diff pomocí P4Merge |
Podle toho, kolik parametrů se zadá na příkazové řádce, se spustí buď diff (2 parametry), nebo merge (3-4 parametry). Každý parametr je cesta k porovnávanému souboru.
Parametry příkazové řádky P4Merge |
P4Merge sice není open source, ale je free, takže nic nebrání jeho zakomponování do jiného nástroje.
Konfigurace Mercurialu
Mercurial neobsahuje nástroj na vizuální merge. Pokud je potřeba zmergovat konfliktní změny a žádný nástroj není nakonfigurovaný, tak Mercurial vloží do sloučeného souboru mergovací značky (takový to <<<<<<<<<<< something). To asi nechceme :-)
Mergovacích nástrojů existuje spousta, každý si určitě vybere. Já jsem si oblíbil P4Merge - přece jenom, když něco s oblibou používáte dva roky, tak vám to trochu přiroste k srdci. Jak teda Mercurialu podstrčíme P4Merge?
Konfigurace merge nástroje je v souboru ~/.hgrc v sekci [merge-tools]:
Druhá vada na kráse je, že P4Merge neumí diff více souborů (např. příkaz hg p4diff -r 12:tip). Takže ho nemůžu použít pro vizuální diff mezi revizemi. To je důvod, proč mám v souboru .hgrc jako další externí diff nástroj Meld, který diff adresářů umí.
Máte nějaké tipy na používání P4Merge, nebo jiného vizuálního nástroje na merge v Mercurialu? Budu rád, když se podělíte o své zkušenosti v komentářích.
Mergovacích nástrojů existuje spousta, každý si určitě vybere. Já jsem si oblíbil P4Merge - přece jenom, když něco s oblibou používáte dva roky, tak vám to trochu přiroste k srdci. Jak teda Mercurialu podstrčíme P4Merge?
Konfigurace merge nástroje je v souboru ~/.hgrc v sekci [merge-tools]:
[merge-tools] p4.priority = 60 p4.premerge = True p4.executable = p4merge p4.gui = True p4.args = $base $other $local $output p4.binary = False [extensions] hgext.extdiff = [extdiff] cmd.p4diff = p4merge cmd.meld = meldJak je vidět, nastavil jsem si kromě merge nástroje i externí diff. Takže když pustím příkaz hg p4diff file1 file2, spustí se mi také P4Merge, tentokrát jako diff nástroj.
Merge pomocí P4Merge |
Je to opravdu taková idyla?
Není. Abych byl maximálně spokojený, chybí mi (zatím) dvě věci. Jednak bych rád, abych mohl provést hromadný merge - Mercurial totiž dělá to, že pro každý mergovaný soubor sekvenčně spustí P4Merge. A já bych chtěl např. hromadně přijmout příchozí, nebo své změny. Což je věc, kterou P4 normálně umí. Ale asi je to zajištěno přes P4V klienta.Druhá vada na kráse je, že P4Merge neumí diff více souborů (např. příkaz hg p4diff -r 12:tip). Takže ho nemůžu použít pro vizuální diff mezi revizemi. To je důvod, proč mám v souboru .hgrc jako další externí diff nástroj Meld, který diff adresářů umí.
Meld, vizuální diff mezi revizemi |
Máte nějaké tipy na používání P4Merge, nebo jiného vizuálního nástroje na merge v Mercurialu? Budu rád, když se podělíte o své zkušenosti v komentářích.
Znas taky Meld?
OdpovědětVymazatMeld moc neznám. Narazil jsem na něj až teď, když jsem potřeboval ty diffy mezi revizemi. Takže jsem si s ním trochu pohrál, ale používám ho jen občas - většinou si vystačím s komandlajnovým hg diff.
VymazatNa diff mam taky nejradsi prikazovou radku (hg diff). Za popis konfigurace vizualniho merge vsak diky!
OdpovědětVymazatZkoušel jsi použít: https://www.jetbrains.com/idea/webhelp/running-intellij-idea-as-a-diff-or-merge-command-line-tool.html
OdpovědětVymazatNejsem si jistý, jak dobře to bude fungovat v rámci této externí integrace, ale jinak se mi s Diff toolem uvnitř Idey pracuje dobře.
To je, řekl bych, docela kuriozní možnost :-) pouštět IDE jako diff.
VymazatIDE většinou mají plugin pro daný VCS a diff nástroj funguje v rámci něho. To bude asi tenhle případ, ne?
Nicméně, vyzkoušel jsem a funguje to. Ale možná mám někde něco špatně nastavený - ten IDEA diff se spoští cca 10 sekund a navíc mi to na Ubuntu řve, že OpenJDK má "PERFORMANCE AND GRAPHICS ISSUES!" a chce to po mně zmáčnkout enter. :-/
Jinak ten původní záměr byl, mít něco na merge mimo IDE - dost často něco bastlím jen tak ve Vimu a komituju z komand lajny.
Vymazat