Subversion
Stručný návod pro práci se systémem pro správu verzí Subversion
- Domovská stránka projektu SVN.
- Literatura: Version Control with Subversion.
Instalace
Linux
Základní klient (voláme z příkazové řádky jako "svn") pro přístup a využívání služeb SVN je pro distribuce Debian GNU/Linux a Ubuntu obsažen v balíčku subversion.
MS Windows
Základní klient je dostupný zde. Existuje také několik GUI či zásuvných modulů, např. pro Průzkumníka. Společnost tigris.org vyvíjí vlastní GUI s názvem rapidsvn.
Přihlášení, autentifikace
Pro přihlášení do repositáře na Slonovi je třeba nad protokolem svn použít protokol ssh ssh+svn://. Aby nebylo nutné při každém příkazu opakovat autentifikační údaje (uživatel, heslo) je možné využít autentifikace pomoci veřejného klíče.
Autentifikace pomoci veřejného klíče
Autentifikace pomoci veřejného klíče spočívá v několika krocích:
- vygenerování veřejného a privátního klíče
- umístění (registrace) klíče na straně klienta a serveru
Základní použití
- Vytvoření repositáře
svnadmin create cesta/k/repositari/repositar
- Import dat do repositáře
svn import muj_adresar file:///cesta/k/repozitari/repozitar -m "Import dat"
- Výpis obsahu repositáře
svn list file:///cesta/k/repozitari/repozitar
- Získání pracovní kopie repozitáře
svn checkout file:///cesta/k/repozitari/repozitar # repozitář je na lokálním počítači svn checkout svn+ssh://server.domena.cz/cesta/k/repozitari/repozitar # přístup k repozitáři přes svn server # a šifrované připojení ssh
Základní pracovní cyklus
- aktualizace pracovní kopie
svn update
- změny v pracovní kopii: Nově vytvořený soubor v pracovním adresáři není automaticky přidán do pracovní kopie. Nový soubor se zařadí do pracovní kopie až provedením příkazu
svn add novy_soubor
. Nový adresář je také nutné přidat příkazemsvn add novy_adresar
, nebo ho už vytvořit příkazemsvn mkdir novy_adresar
. Soubory není možné jednoduše z pracovní kopie vymazat příkazemrm soubor
, musí se k tomu použít příkazsvn rm soubor
.
svn add soubor # přidání souboru nebo adresáře - implicitně včetně podadresářů - do pracovní kopie svn rm soubor # vymazání nemodifikovaného souboru nebo adresáře # soubor se okamžitě odstraní z pracovní kopie, # adresář, který není prázdný, se neodstraní, ale označní pro vymazání - k odstranění # dojde až po provedení přikazu commit # --force : vymaže modifikovaný i soubor který není ve správě subversion svn rmdir adresar # vymazání adresáře svn copy soubor # kopírování souboru nebo adresáře svn move soubor # přesun souboru nebo adresáře
- zjištění změn v pracovní kopii
svn status # vypisuje změny pracovní kopie vzhledem k revizi pracovní kopie uložené v adresáři .svn # nezjišťuje aktuální stav v repozitáři # -v : podrobnější výpis # -u : provede porovnání z repozitářem a hvězdičkou označí soubory změněné v repozitáři i v # pracovní kopii, tedy soubory u nichž by po provedeni příkazu update nastal konflikt # A - soubor je přidán do pracovní kopie # D - soubor je vymazán z pracovní kopie # M - soubor je změměn # C - soubor je v konfliktu (soubor byl modifikován a současně je v repozitáři novější # verze tohoto souboru) # L - soubor je uzamčen (např při nedokončení aktualizace pracovní kopie - spusťte # příkaz svn cleanup # ? - soubor není ve správě subversion svn diff soubor # výpis změn v obsahu konkrétního souboru
- zahození provedených změn v pracovní kopii: příkaz obnový soubor podle stavu v revizi pracovní kopie (z adresáře .svn)
svn revert soubor
- řešení konfliktů, přijetí změn z repositáře
svn update svn resolved soubor
- publikování změn do repozitáře: Každým zveřejněním změn se zvyšuje číslo podlední revize všech souborů v repozitáři o jedničku. To znamená, že jeden soubor může být v revizi číslo 10 vytvořen, v revizích 11 až 35 beze změny a modifikován až v revizi 36. Revize 11 až 35 se bude týkat modifikace jiných souborů v repozitáři.
svn commit # -m 'zprava zveřejnění změn' # proměnná SVN_EDITOR nebo EDITOR určuje jaký editor bude spuštěn pro editaci zprávy # pokud není zadána pomocí parametru -m
- export souborů z repozitáře (adresářový strom bez adresářů .svn)
svn export svn+ssh://server.domena.cz/cesta/k/repozitari/repozitar adresar_pro_export # -r cislo revize svn export file:///cesta/k/repozitari/repozitar adresar_pro_export svn export adresar_pracovni_kopie adresar_pro_export
Řešení konfliktů
Konflikt verzí nastává tehdy, pokud byl soubor, který je v pracovní kopii v repozitáři změněn jiným uživatelem. Konfliktům můžeme předcházet používáním příkazu svn status -u. Typy konfliktů:
- U - soubor neobsahuje lokální změny, ale byl změněn v repozitáři
- G - lokálně změněný soubor byl změněn také v repositáři, ale změny se nepřekrývají a bylo automaticky provedeno sloučení
- C - konflikt, který je nutné vyřešit editací (ručně): V tomto případě svn vytvoří soubory
soubor.txt.mine # midifikovaný soubor pracovní kopie soubor.txt.r8 # soubor v revizi pracovní kopie soubor.txt.r9 # soubor v revizi repozitáře (HEAD revision) soubor.txt # soubor, kde jsou obě verze, ovšem nesloučené
Historie revizí
svn log # parametrem -r 8 nebo -r 1:8 udáváme číslo revize svn cat -r 8 # vypisuje obsah souboru z revize 8 svn list -r 8 # vypisuje obsah aktualního adresáře takový, jaký byl v revizi 8
Ukázka GUI rapidsvn (MS Windows)


