Subversion

Z GeoWikiCZ

Stručný návod pro práci se systémem pro správu verzí Subversion

Instalace

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.

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říkazem svn add novy_adresar, nebo ho už vytvořit příkazem svn mkdir novy_adresar. Soubory není možné jednoduše z pracovní kopie vymazat příkazem rm soubor, musí se k tomu použít příkaz svn 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)

svn checkout https://svn.osgeo.org/grass/grass/branches/develbranch_6 grass6_devel
svn update
svn log