Emacs pro mírně pokročilé (4): Správa verzí souborů v Emacsu

3. 5. 2001
Doba čtení: 6 minut

Sdílet

Ilustrační obrázek
Autor: Depositphotos – stori
Ilustrační obrázek
Práce na větším projektu a spolupráce více autorů s sebou přináší nejeden problém. Jsou-li navíc lidé zapojení do takovéhoto projektu roztroušeni po celém světě, je problém o to větší. S řešením, jak jednotně uchovávat a spravovat soubory, přichází tzv. systém pro správu verzí. Jak s takovýmto softwarem spolupracuje Emacs, o tom bude řeč v dnešní části seriálu.

Minule jsme si ukázali, že Emacs velmi dobře spolupracuje s externími programy při kompilaci a hledání textu v souborech. Dnes se podíváme, že ani spolupráce a komunikace s programy pro správu verzí mu není cizí. „Systémy pro správu verzí (Version control systems)“ jsou programy, které dovedou zaznamenávat více verzí zdrojového souboru. Dovedou také uchovávat informace o historii, například kdy byla která verze vytvořena, kdo ji vytvořil a jak změny popsal. Komplexní popis jednotlivých systémů by jistě vydal na samostatný seriál a nebudeme jej zde příliš podrobně rozebírat. Rozhraní Emacsu pro komunikaci s těmito systémy se jmenuje VC (Version Control) a umožňuje práci se třemi systémy: RCS, CVS a SCCS.

Je-li soubor uložen v systému pro správu verzí, říkáme, že je
„registrován“. Každý registrovaný soubor má
odpovídající hlavní soubor (master file), který reprezentuje současný
stav, historii, záznamy o změnách apod. a je obvykle uložen na nějakém
serveru. Soubor, který je spravován v takovémto systému, se obvykle
nazývá pracovní kopií (work file). Tento soubor lze běžným způsobem
editovat a po provedení změn se tyto zaznamenají do systému
(check in) spolu s popisem změn; nalézá se obvykle v pracovním
adresáři uživatele. Systémy obsahují zpravidla mechanismus, jak
reagovat v případě, že chce soubor měnit zároveň více uživatelů
(zamykání souborů u SCCS a RCS, slučování změn ve chvíli vkládání do
systému). Jak už jsem uvedl, podrobný popis mechanismu ukládání je
skutečně nad rámec tohoto seriálu.

Podívejme se nyní na to, jak se soubory registrovanými v
nějakém takovémto systému pracuje Emacs. Pokud otevřeme soubor, který
je zaregistrovaný v některém z těchto systémů, Emacs nás o tom
informuje na stavové řádce (mode line), například
CVS-1.13, tedy jméno použitého systému a pomlčkou
oddělené číslo verze (znak mezi jménem a verzí může být také
: ‘, což značí uzamčený nebo modifikovaný soubor).
Příkazy módu VC jsou v jistém smyslu univerzální, kokrétní
akce (zamknutí souboru, přidání změn do systému, …) je tedy
vybírána na základě aktuálního stavu souboru. Klávesové zkratky
C-x C-q a C-x v v provádějí
logicky následující operaci v systému na aktuálním souboru. Přesněji
řečeno je funkce vc-next-action namapována pouze na
zkratku C-x v v, přesný význam příkazu C-x C-q je poněkud jiný a je více závislý na použitém systému.

Základní rozlišení při použití módu VC souvisí úzce s
použitým backendem, tedy systémem pro správu verzí, a to s použitím
zamykání a bez zamykání. První možnost je standardní pro
systémy RCS a SCCS, zatímco druhá pro
CVS. Logické kroky v případě použitého systému se
zamykáním tedy jsou: zamknutí souboru, pokud již není uzamčený; je-li
námi uzamčený a obsahuje změny, pak je to poslání změn do systému;
pokud je námi uzamčený, ale neobsahuje žádné změny, je následujícím
krokem znovuodemčení souboru; pokud je soubor zamknutý někým jiným,
zeptá se Emacs, zda chcete toto uzamčení „ukrást“. Tyto
kroky jsou platné i v případě, kdy je zamykání použito se systémem
CVS. V druhém případě, kdy není použito zamykání, nabídne
C-x C-q sloučení změn v případě, že jsou v
systému obsaženy změny nezahrnuté v naší aktuální pracovní kopii;
pošle změny do systému v případě, že žádné takové změny
nenalezne. Existuje možnost, jak chování následujícího kroku rozšířit,
přidáme-li prefix C-u před příkaz, lze pomocí parametru
například ovlivnit číslo další verze apod. Při posílání změn do
systému je nejprve zobrazen tzv. *VC-Log* buffer, který
slouží pro zapsání změn. Změny jsou odeslány po stisku C-c C-c, pokud změny odeslat nechceme, jednoduše tuto posloupnost
nezadáme. V tomto bufferu lze také procházet pomocí příkazů
M-n, M-p, M-s a
M-r (podobně jako např. v bashi) historií zadaných
logovacích zpráv.

Jednou z mnoha výhod systémů pro správu verzí je, že umožňují vracet
se ke starším verzím, to je prohlížet, porovnávat apod. Zadáme-li v
bufferu obsahující pracovní kopii souboru registrovaného v jednom ze
systémů C-x v ~ VERZE, kde VERZE je číslo námi požadované
verze souboru, otevře se v Emacsu příslušná verze ze systému. Pomocí
C-x v = porovnáme aktuální obsah bufferu s poslední verzí
odpovídajícího souboru v systému. Předřadíme-li navíc tomuto příkazu
prefix C-u, můžeme přímo zadat dvě konkrétní čísla verzí k
porovnání. Příkaz C-x v g je zkratka pro CVS annotate,
který zobrazí aktuální stav souboru s popisem, kdy a kým byl který
řádek editován. Dalšími užitečnými příkazy jsou registrování (ještě
nezaregistrovaného souboru) do systému ( C-x v i),
zobrazení aktuální stavu a výpis zaznamenaných změn ( C-x v l), a mnoho dalších, jejichž podrobný popis je uveden v manuálu.
Významné je, že mód VC lze použít ve spojení s
tzv. Dired módem (o kterém bude podrobněji řeč v některém z
následujících dílů). Stručně řečeno umožňuje tento mód práci s více
soubory najednou. Posloupnost C-x v d vytvoří právě
takovýto VC Dired Mode, kde lze nejen získat informaci o
aktuálním stavu všech souborů zaregistrovaných v systému, ale zároveň
s nimi pracovat. Čtenářům znalým práce s Dired módem
prozradíme, že příkaz v v ( vc-next-action)
operuje s označenými soubory, ostatní si budou muset počkat na
příslušný díl seriálu.

Práce se systémy pro správu verzí je u větších projektů často složitá
a my jsme si zde nastínili pouze základní, ale zároveň nejužívanější
příkazy. Popis práce s větvemi a další podrobnosti nebudeme dále
rozebírat, ale zaměříme se ještě alespoň částečně na související
problém, kterým je řešení konfliktů. Jedná se tedy o situaci, kdy jsme
provedli změny na pracovní kopii souboru, který se mezitím v systému
pro správu změnil. V Emacsu je možné pro řešení takovéto situace
použít tzv. Emerge.
Kompletní popis by byl bohužel zdlouhavý a příliš obsáhlý a vzhledem
ke své obecnosti by si zasloužil samostatný článek. S ohledem na
souvislost s použitím výše popisovaného módu pro správu verzí si jej
zde alespoň stručně popíšeme. Emerge zobrazuje porovnávání změn ve
třech bufferech, „A buffer“ a „B buffer“ a
tzv. „merge buffer“. První dva obsahují původní soubory a
třetí je výsledkem spojení.

V daném momentě je v prostředí Emerge pozornost soutředěna na
jeden konkrétní tzv. „vybraný“ rozdíl. Tento rozdíl
je v každém ze dvou původních bufferů označen pomocí v a
^, tedy například takto:

Školení Linux


vvvvvvvvvvvvvvvvvvvv
TEXT, KTERÝ SE LIŠÍ
^^^^^^^^^^^^^^^^^^^^

Emerge

umožňuje pohybovat se po jednotlivých rozdílech vpřed (klávesa n) či vzad (klávesa p); vybírat verzi obsaženou v prvním (A) (klávesa a) či v druhém (B) souboru (klávesa b); odskakovat na n-tý rozdíl ( C-u N j) apod. Především ovšem rozlišuje práci ve dvou módech: rychlém (fast) a editovacím (edit). Rychlý mód slouží pouze pro slučování rozdílů výběrem jedné z variant (a pro tento mód slouží uvedené zkratky). Mód editační umožňuje navíc běžné upravování souboru (zmiňované akce zde mají potom předponu C-c C-c). Přepínání mezi módy je namapováno na počáteční písmena jejich názvů, tedy f pro rychlý a e pro editační. Opuštění emerge je možné dvěma způsoby: příkazem emerge-quit (klávesa q), který uloží sloučené změny do souboru zadaného jména, nebo pomocí C-], který přeruší prováděné slučování. Příkazů pro práci s emerge je, jak bylo řečeno, celá řada, snad alespoň tento stručný přehled poslouží jako počáteční berlička při řešení problémů vzniklých během práce s módem pro správu verzí.

Příští díl bude věnovaný tzv. TAGům a jejich použití v prostředí editoru Emacs. Bude se jednat o poslední ryze programátorský díl, následující budou opět určeny širší Emacsovské komunitě.



Nejnovější články