Subversion (zkráceně SVN) se používá ke zprávě zdrojových kódů, které jsou napsány v jakémkoliv jazyce jak programovacím tak lidském. Nativně podporuje kódování UTF-8 a proto není problém psát dokumenty v různých jazycích. SVN uchovává (vytváří) revize, to znamená, že uchovává stav dokumentů z doby, kdy jste dali vykonat příkaz commit (příkaz sslouží k odeslání zdrojových dat na server). Prostřednictvím Subversion lze spravovat libovolné verze textového dokumentu (spravovat lze i binární soubory, ale ne už s takovým komfortem jako textové soubory). Jedná se aplikace pracující na bázi klient-server, v tomto článku se budeme zabývat používáním klientem pro SVN.
Pro základní strukturu SVN se nejčastěji používají složky (trunk, tags, branches)
Struktura:
- trunk - umísťuje aktuálná vývojová verze
- tags - umístění jednotlivých verzí (např. v1.0, v1.5,..)
- braches - jednotlivé vývojové větce vývojáčů (např. pajinek-dev ..)
Prvním příkazem je stáhnutí aktuálního repozitáře jze serveru ako lokální kopii na náš disk.
svn checkout (co) <url adresa repozitáře na serveru>
Pokud se jedná o první nahrávání dat do repozitáře, lze užít funkce
svn import <adresa lokální složky> <url adresa repozitáře serveru>
Každá složka v lokální kopii obsahuje složku .svn, z které klient získává data. Pro získání dat bez této složky je určen příkaz export. Ten vytvoří kopii bez složky .svn. Při přenosu lokální kopie (například při odevzdání práce) není příliš vhodné předávat s dílem i data o vaší SVN kopii.
svn export <cesta pro export> <cesta uložení>
Při práci se soubory nedoporučuji používat klasické příkazy (rm, rmdir, mv,..) ale raději příkazy SVN. Dochází pak ke konfliktům lokální kopie s kopií na serveru.
- svn copy (cp)
- svn mkdir
- svn move (mv, rename, ren)
- svn delete (del, remove, rm) smazání souboru ze svn i z lokální kopie
Následujícím příkazem pošleme aktuální změny na lokální kopii na server (tedy synchronizujeme naši verzi se server). Parametr "-m" určuje zprávu pro logování a tak můžeme snadno logovat změny poslané na server
svn commit (ci) -m "<Log>"
Příkazem log pak dostaneme výpis logů
svn log
Pro opačnou synchronizaci, kdy aktualizujeme naši kopii a data bereme ze serveru se provádí příkazem
svn update (up)
Informace o rozdílech mezi pracovní kopií a verzí na disku
status (stat, st)
Další příkazy pro práci ze SVN:
- svn info - informace o dané revisi:
- svn add - přidání souboru do svn
- blame (praise, annotate, ann)
- cat - vypsání daného souboru z repozitáře (obdobné jako cat v bashi)
- changelist (cl)
- cleanup
- diff (di) - vypíše rozdíl mezi lokální kopií a aktulní verzí v repozitáři
- help (?, h) - vypíše nápovědu
- list (ls) - seznam souborů, obdobné jako ls v bashi
- lock
- switch (sw)
- unlock
Největší výhodou verzovacích systémů je možnost zpětnému dohledání jednotlivých verzí, popřípadě slučování dvou odlišných vývojových větví. K tomu slouží následující příkazy. Při práci s verzemi často dochází ke kolizím. Jejich řešení však mnohdy bývá netriviální.
- merge
- mergeinfo
- resolve
- resolved - řešení konfliktů, v případě že dojde ke konfliktu je možné soubor ručně upravit a pak pro akceptování změn použít tento příaz
- svn revert - navrácení změn v lokální kopii
Následující příkazy slouží k nastavení chování klienta pro jednotlivé složky vaší lokální kopie.
- propdel (pdel, pd)
- propedit (pedit, pe)
- propget (pget, pg)
- proplist (plist, pl)
- propset (pset, ps)
V prostředí bashe (konzole) lze snadno pracovat s opracemi SVN.
Následující příkaz smaže všechny problémové soubory z lokálního disku
svn status | grep "\!" | awk '{print $2}' | xargs svn rm
Příkaz přidá všechny soubory, které nejsou v repozitáři a nalézají se pouze na lokálním disku
svn status | grep "\?" | awk '{print $2}' | xargs svn add
Vytvoření nové větve z trunku:
svn copy svn+ssh://host.example.com/repos/project/trunk \
svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH \
-m "Creating a branch of project"
Přepnutí na vytvořenou větev
svn switch svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH