👋 Nový obsah na borekb.cz

Info Tento blog je v "read-only módu" a nový obsah již nebude přibývat. O vývoji píšu na DevBlog.

Kterak porovnat soubory a adresáře

V souvislosti s verozvacími systémy jsem narazil na poněkud okrajový, přesto důležitý problém, jaký nástroj pro porovnávání souborů a adresářů používat.

Subver­sion out-of-the-box obsahuje diffovací a mergovací utilitu, která však slouží pro velmi základní účely, moc toho neumí a UI je velmi nepřítulné.

Klient TortoisSVN přichází s grafickou mergovací utilitou, která už může být pro některé uživatele postačující, nezvládá však kódování ani porovnávání adresářů.

Jal jsem se tedy hledat na netu nějaké rozumnější nástroje. Z FAQ TortoiseSVN jsem věděl o „excelent Open Source“ programu WinMerge (2.2) a skutečně, tento nástroj má prakticky vše důležité:
  • umí Unicode (přesněji UTF-8, což mi však stačí)
  • umí porovnávat adresáře
  • umí mergovat
  • v rámci porovnávaných souborů umí zvýrazňovat syntaxi
  • obsahuje command-line interface pro snadné volání třeba právě ze SVN
  • neustále se vyvíjí a je Open Source
Při práci jsem však narazil na několik „drobností“, které bohužel snižují použitelnost programu. První je uživatelsky velmi nepřítulná podpora kódování. UTF-8 soubory jsou „napoprvé“ správně zobrazeny, pouze obsahují-li BOM (identifikační byty), jinak jsou správně otevřeny pouze soubory v kódování systému (v mém případě Win-1250). Toto chování lze změnit pouze globálně, nikoliv per file, takže např. pro správné zobrazování UTF-8(nonY) je možno v nastavení zvolit defaultní otevírání jako codepage 65001 (navíc musí člověk vědět, že UTF-8=codepage 65001), potom se ale samozřejmě špatně zobrazují Win-1250 soubory.
Dru­hou muškou je porovnávání adresářů. To sice pracuje tak, jak má, ale výsledkem je nepřehledná 2D tabulka namísto stromové struktury jako v jiných programech. Ve výsledcích se tedy lze jen těžko vyznat.

Hledal jsem proto dál. Už ani nevím jak, ale narazil jsem na Araxis Merge (6.5). Podle webové prezentace a ceny (180$!!) jsem myslel, že jsem našel. Program mě uchvátil tímto:
  • Velmi příjemné a jednoduché uživatelské rozhraní
  • Prakticky dokonalá podpora kódování (na úrovni jEditu)
  • Velmi přehledné výsledky porovnávání adresářů
  • Na pravém tlačítku je pod jednou položkou schováno standardní systémové menu
  • Podpora command-line
Úvodní nadšení bylo schlazeno zjištěním, že se A.M. bez optání a bez možnosti zrušení integroval do kontextového menu průzkumníka. Na to jsem citlivý a kdesi uvnitř jsem začal cítit, že tenhle program na počítači nechám jen v případě, že skutečně bude porovnávací jedničkou.
Během krátkého užívání se ale začaly projevovat další slabiny. Předně mi začalo UI připadat až moc jednoduché – na časté operace nebyly tlačítka v nástrojové liště, ale třeba jen v kontextovém menu apod. Také možnosti porovnávání byly velmi omezené – většinou by asi stačili, ale v porovnání s vítězem „testu“ (viz dále) působil program poněkud chudě. Také porovnávání adresářů, které mě zprvu nadchlo, se neukázalo být nejlepší. A.M. vždy porovnával obsahy souborů, takže operace trvala dlouho a nešlo ji nijak ovlivnit. Navíc nebylo nijak signalizováno, jestli ve složce X je nějaký změněný soubor či nikoliv (bylo nutno ji manuálně prozkoumat). Sečteno podtrženo, hledal jsem dál.

Vysoko hodnocený a rovněž velmi populární je Beyond Compare (2.2.7). Na webu se chlubil podporou Unicode, porovnáváním adresářů a dalšími podobnými věcmi jako Araxis Merge, tak jsem ho zkusil. Následoval přesně opačný proces než u A.M.: zpočátku jsem měl výhrady, ale už po pár minutách jsem byl nadšen. Hlavní výhody:
  • Úžasné možnosti porovnávání (dá se nastavit, jak moc „přísný“ má BC být)
  • Přehledné GUI, které však na rozdíl od A.M. obsahuje vše, co by člověk čekal
  • (Pro mě kupodivu) dokáže automaticky zobrazit i UTF-8 bez BOM
  • Prakticky dokonalé porovnávání adresářů (konfigurovatelné, přehledná indikace stavů)
Zpočátku jsem měl akorát problém s tím, že nešlo jednoduše zvolit kódování. Systémové kódování bylo zobrazeno správně a automaticky BC rozpoznal také UTF-8, ale problém byl s libovolným jiným kódováním: BC totiž neobsahuje jednoduchou možnost, jak ho explicitně intruovat k použití určitého kódování. Tato chyba je dost velká, program se však zdál natolik skvělý, že jsem chvíli hledal nějaké řešení a výsledkem je následující jednoduchý workaround:

Options > Rules > New, na záložce General:
Name = ‚Výběr kódování‘ (nebo libovolný název)
Associated with = ‚*.nothing‘ (nějaká přípona, která neexistuje)
Character set = <prompt>

Po otevření porovnání vybrat Tools > Pick rules > Výběr kódování, načež se Beyond Compare optá, jaké má použít kódování pro levé a pravé okno. (Podstata finty: pro jinou příponu je možné definovat jiná pravidla porovnání, třeba i to, v jakém kódování má být soubor otevřen; pravidlo porovnání potom stačí ručně změnit a speciální hodnota kódování <prompt> zajistí, že se BC na kódování optá).

Nenašel jsem tedy nic, co by mi na BC chybělo. Zatím se pouze zdá, že nemá moc propracované řádkové rozhraní, což ani není divu při komplikovaných možnostech nastavení porovnání.

Dál už jsem nehledal, v zásobě mi tak zůstaly následující programy:
  • Guiffy (6.5) – v recenzích poměrně ceněný softík, ihned po spuštění mě však znechutilo swingovské VELMI nepěkné rozhraní
  • Altova DiffDog (2005 SP1) – komplexně vyhlížející nástroj od Altovy, viděl jsem pouze screenshoty a UI vypadá dost komplikovaně (až moc na poněkud jednostranné zaměření diff/merge utilit)
Každopádně můžu určitě prohlásit: Beyond Compare rulez!
Zařazeno do kategorií |
Jakub (St, 2006-09-06 15:25):

Musím jen souhlasit, BC rulez! Taky mě unavovalo věčné porovnávání změn v projektech. Total Commander sice nabízí možnost synchronizace složek, ale velice zjednodušenou, a pro normální práci jsem potřeboval něco propracovanějšího. Láska na první pohled to sice nebyla, ale po prvních minutách práce jsem přestal hledat nějaký jiný program pro synchronizaci. Ještě jedno plus bych u BC uvedl a to je jeho cena $30.

Komentáře jsou uzavřeny (blog je v read-only módu). Pokud mě chcete kontaktovat, můžete mailem.