Předmluva
Tato kniha se nesnaží být překladem SVN book i když z ní samozřejmě vychází. Motivací pro mě byli jak vlastní začátky se Subversion, tak pozdější zavádění Subversion ve větším měřítku. Dnes si práci bez Subversion nedovedu představit a kvalitní česká kniha zaměřená převáně na uživatele neexistuje. Snad tato kniha přinese ještě větší rozšíření Subversion.
Pokud kniha obsahuje nějaké skripty tak jsou buď psané ve Windows Vista nebo na Linuxu kde používám distribuci Ubuntu.
Pokud budete mít jakekoliv připomínky, náměty nebo byste se chtěli podílet na rozrůstání obsahu knihy, obraťte se na mě nejlepe na email <ladislav@prskavec.net> a do předmětu uveďte "SVN kniha".
O knize
Licence
Tento dokument je určen výhradně pro osobní potřebu seznámení se systémem Subversion. Jakékoliv jiné použití, včetně dalšího šíření, pořizování kopií apod. je výslovně zakázáno a bude považováno za porušení autorských práv.
Úvod
Co je to Subversion?
Zcela vlastními slovy bych pro znalé řekl, že je to nástroj, který nahradil CVS. Pro ty, kterým tato věta nic neříká je určen další odstavec.
Subversion je nástroj ze skupiny SCM (správa obsahu zrojových kódů - Source Content Management). Nejvíce rozšířený nástroj v minulých letech a částečně i dnes je CVS, který má několik zásadních nevýhod, které donutili CollabNet k tomu, aby se vrhli do vývoje Subversion.
Subversion slouží 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 anglicky, rusky nebo svahilsky. SVN uchovává vytváři revize, to znamená, že uchovává stav dokumentů z doby, kdy jste dali vykonat příkaz commit, který slouží k odeslání zdrojových dat na server. Můžete si pomocí Subversion spravovat verze textového dokumentu jako je například tato kniha psaná v Docbooku a nebo zdrojové kódy v libovolném programovacím jazyce (třeba i vlastním).
Subversion patří k cetralizovaným SCM systémům jako je CVS, Perforce, Clearcase a další. Existují také distribuované SCM systémy, které nemají klasickou architekturu client/server. Například Bazaar, Mercurial nebo Git. Porovnání a odkazy na jiné SCM najdete na stránkách Better SCM
Historie Subversion
Subversion vznikl officiálně 31. srpna 2001 a verze 1.0 byla k dispozici v roce 2004.
1.1 září 2004 (FSFS)
1.2 květen 2005 (locks)
1.3 prosinec 2005 (svnserve)
1.4 září 2006 (svnsync)
1.5 červen 2008 (merge tracking support)
1.6 březen 2009
Vývoj Subversion neustále pokračuje a přibližuje se jeho kvalita komerčním systémům jako je Perforce nebo Clearcase. V opensource komunitě, ale začíná také získávat popularitu Git, který je narozdíl od Subversion distribuovaný. Git je například používán v komunitě OpenSUSE nebo při vývoji jádra Linuxu.
Jak funguje Subversion
Architekturu subeversion nejlépe znázorňuje obrázek v [SVNBOOK] na straně 22.
Základní pojmy
Repository (repozitář, centrální úložiště)
Umožňuje organizovat projekt a spravovat jeho verze. Fyzicky je uloženo na souborovém systému serveru. K repository se přistupuje přes Repository Access Layer (RA) systému Subversion a jeho správa se provádí klientskými nástroji.
Branch (větev)
Slouží k organizaci repository, jedná se o jakousi analogii s adresáři. Pokud se z repository vyzvedne větev, na klientovi vznikne adresářová struktura, která přesně odpovídá větvím v repository.
Revision (revize)
Revize je pořadové číslo každé změny. Slouží ke sledování změn ve větvích v čase. Každá změna v nějaké větvi vytvoří novou revizi v rámci celé repository. Revize obsahuje informace o tom, co bylo změněno, kdo změnu provedl, poznámku a čas.
Pracovní kopie (working copy)
Kopie dat z určité větve z repository v aktuální revizi na pevný disk lokálního klienta. Do pracovní kopie je možné provádět změny, které je možné commitem uložit zpět do repository.
Commit
Odeslání změn provedených od posledního commitu do repository. Commit je nejčastěji používaná změna při práci s repository. Pokud se provádí commit celé pracovní kopie, jedná se o atomickou operaci, jsou odeslány veškeré změny ve všech objektech ve správě verzí; pokud dojde k nějaké chybě při přenosu, není commit pro ostatní uživatele repository zviditelněn, není vytvořena nová revize.
Konflikt
Konflikt je stav, který signalizuje, že stejný objekt, který má být právě commitován, byl změněn někým jiným a nachází se v repository v aktuální revizi v jiné podobě, než jaký je v pracovní kopii. Nelze provést commit celé pracovní kopie, pokud se v ní nachází jeden nebo více souboru v konfliktu.
Cheap-copy
Technika, kterou se realizují kopie prováděné v rámci repository. Objekty nejsou v repository fyzicky duplikovány, ale jsou vytvořeny tzv. odkazy (link) na kopírované objekty. Zjednodušeně lze chápat takovýto link jako informaci o URL s číslem revize. Díky tomu má SVN nízké nároky na datový prostor.
Doporučená struktura repozitory
Stukturu repozitory lze jen doporučit, obvyklá struktura je:
/project_name
/trunk
/tags
/branchesSturuktura může samozřejmě obsahovat i další adresáře např. vendors pro kód, třetí strany nezbytný k projektu. Existují samozřejmě další možnosti v literatuře se uvádí např.
/trunk /project_1 /project_2 /tags /project_1 /project_2 /branches /project_1 /project_2
Instalace
Získáme Subversion
Subversion je k dispozici ve formě zdrojových kódů nebo ve formě binárních balíčků pro různé operační systémy. Subversion je dostupný pro Windows, Mac OS, různé distribuce linuxu i pro některé unixy. Veškerý potřebný software stáhnete na stránkách http://subversion.apache.org
Windows
Ve Windows je několik programů, které si můžete pro práci zvolit a to buď klasického řádkového klienta a server s podporou svnserve. Nebo jako klienta použijete TortoiseSVN (TSVN), který umožňuje běh jako klient i server (s omezením na lokální přístup k repozitory). Pokud chcete přistupovat přes http a https doporučil bych k instalaci VisualSVN Server.
Pokud nepotřebujete, aby někdo přistupoval k vašim lokálním repozitory doporučuji TSVN. Tento program umí všechny funkce a má pěkné prostředí, které se integruje do Windows Exploreru. Je nejpokročilejší klient, který umožňuje i tvorbu hooks skriptů na straně klienta.
VisualSVN server
VisualSVN je jen Apache server s mod_dav_svn doplňený administrační konzolí a webovým prohlížečem repozitory.
Instalace je VisualSVN serveru je jednoduchá. Stáhněte si instalátor, který vás pomocí wizarda provede. Můžete navolit kam se server nainstaluje i kde máte adresář s repozitory. Můžete také použít kromě Subversion autentifikace i Windows autentifikaci. Volitelné je i https připojení.
Nastavení práv pro jednotlivé repozitory se dá provést pomocí admnistrační konzole. VisualSVN také disponuje webovým prohlížečem repozitory, který je dostupný na adrese https://localhost:8443/ pokud to máte v základním nastavení lokálně, jinak na příslušné adrese a portu.
Pro nastavení práv služí VisualSVN Server Manager, kde máte vidět jak repozitory, tak uživatele a skupiny. Potom přes pravé tlačítko a volbu Security nastavíte práva buď pro všechna repozitory najednou nebo u každého zvlášť.
Linux - Debian / Ubuntu
Pro instalaci na Ubuntu použijte zdroje přímo z repozitory.
sudo apt-get install subversion sudo apt-get install subversion-tools
Balík subversion obsahuje jak klienta tak server (svnserv). V balíku subversion-tools jsou utility (svn-backup-dumps, svn-clean, svn2cl, mailer apod.)
Já používán svn2cl pro generování changelogů, mailer používám v post-commitech, abych věděl co se děje v repozitářích.
Pro přístup lze použít file://, svn:// nebo svn+ssh://. Pokud chcete použít http:// nebo https:// musíte to udělat přes Apache a WebDAV.
sudo apt-get install libapache2-svn
Konfigurace se potom provede v /etc/apache2/mods-available/dav_svn.conf. Ukázka je s přepínačem SVNListParentPath, kdy nám dovolí přístup ke všem repozitory, které máme v adresáři /srv/svn.
<Location /svn/> DAV svn SVNPath /srv/svn SVNListParentPath On AuthType Basic AuthName "Test subversion repository" AuthUserFile /etc/subversion/passwd Require valid-user </Location>
Podrobný návod pro Ubuntu najdete například ve wiki.
Začínáme
TortoiseSVN
Vytváříme repozitory
Vytvoříme adresář pro repozitory např. c:/rep a v něm adresář pro projekt např. rep_test a na adresáři přes pravé tlačítko se dostaneme do menu TSVN, kde před volbu Vytvořit repozitory zde (Create repozitory here) vytvoříme repozitory jak ukazuje obrázek. Po úspěšném vytvoření repozitory si můžeme prohlédnout adresář a uvidíme soubory co vytvořil Subversion.
Struktura repozitory je na dalším výpisu. V adresáři conf/ jsou konfigurační soubory pro přístup k repozitory, v adresáři db/ jsou uložená data a souboru current je aktuální revize. V adresáři hooks/ jsou šablony pro hooks skripty, které umožňují vykonat nějakou akci před určitou akcí v Subversion.
conf/ authz passwd svnserve.conf db/ .. current .. hooks/ post-commit.tmpl post-lock.tmpl post-revprop-change.tmpl post-unlock.tmpl pre-commit.tmpl pre-lock.tmpl pre-revprop-change.tmpl pre-unlock.tmpl start-commit.tmpl locks/ format README.txt
Po vytvoření repozitory je dobré otevřít repozitory browser a vytvořit základní strukturu pomocí přímaku vytvořit adresář "create folder".
V repozitory můžete vytvořit vlastní adresáře, ale doporučuje se nejdříve vytvořit strukturu do které naimportujete svoje adresáře.
Struktura slouží k tomu, abychom vedli hlavní kmen projektu (trunk) a mohli také vést větve (branches) a dělat nálepky (tags) pro určité vydané verze.
Import zdrojových kódů
Pokud už máme něco co chceme do repozitory importovat uděláme to pomocí příkazu import. Jinak můžeme tento krok přeskočit, protože strukturu můžeme vytvořit pomocí repozitory browseru.
Vytváříme pracovní kopii
Provedeme checkout na repozitory a začneme pracovat.
SVN - řádkový klient
Ve stručnosti zopakuji stejné postupy jako ve TSVN.
Vytvoříme repozitory
svnadmin create --fs-type fsfs c:/rep/rep_testRozdíl mezi Windows a Linuxem je jen ve způsobu zadávání cesty k repozitory. Obdobně to můžete aplikovat na všechny příklady. SVN se ve funkčnosti mezi Windows a Linuxem nijak neliší.
svnadmin create --fs-type fsfs /srv/svn/rep_test
V řádkovém klientu nemůžeme vytvořit adresáře přímo, ale uděláme je rovnou při prvním importu souborů, tento postup lze použít i přes TSVN.
cd c:/tmp mkdir test cd test mkdir trunk mkdir tags mkdir branches svn import --message "Initial import" file:///C:/rep/rep_test
Potom vytvoříme pracovní kopii
svn checkout file:///C:/rep/rep_test/trunk c:/wc/test
Běžný pracovní postup
Nejdříve si aktualizujte svoji pracovní kopii.
svn update
nebo
svn up
Skoro každý příkaz má zkratku, která se hodí aby jste to nemuseli rozepisovat. Stačí se podívat na svn help a uvidíte je.
Potom vytvoříte nové soubory, smažete staré soubory, změníte obsah. Pomocí příkazu svn diff si ověříte můžete zobrazit změny své pracovní kopie proti verzi v repozitory.
svn diff
Pokud jste pracovali s pracovní kopii a přidávali nebo mazali soubory, je dobré vědět zda jsou již přidané či v jakém stavu jsou to zjistíme pomocí svn status a potom můžeme chybějící soubory např. pomocí svn add přidat.
svn status
Změny odešlete je pomocí commitu do repozitory.
svn commit -m "Text zprávy"Postup se opakuje, jen update nemusíte dávat pokaždé pokud jste si jistý, že nikdo s repozitory mezitím nepracoval. Případně můžete zamknout repozitory během práce na změnách. Pokud nenastane konflikt vystačíte si s tímto jednoduchým postupem. Pokud dojde ke konfliktu můžete změny spojit (merge) nebo svoje vrátit pomocí svn revert.
Export pro hosting, ftp apod.
Pokud by vám vadí adresáře, které svn vytváří automaticky a uchovává v nich svoje informace, tak těch se zbavíte pomocí exportu.
Pokud chcete do aktuálního adresáře všechny soubory vyexportovat stačí zadat tento příkaz a soubory se tam uloží. Dá se také pracovat s pracovní kopii nebo zadávat i cestu pro export.
svn export file:///C:/rep/rep_test/trunk
Příklad exportního skriptu v shellu linux pro export projektu. Exportuje se poslední revize, a vytvoří se kromě exportu i balík označený revizí a datumem vytvoření.
# path to export files EXPORTPATH=/home/user/export/projekt # url of repository REPOS=file:///home/user/repos/projekt/trunk/ # path to repository REPOSPATH=/home/user/repos/projekt/ # last revision REV="$( svnlook youngest $REPOSPATH )" # make export path mkdir -p $EXPORTPATH # svn force export (nothing to screen) svn export --force $REPOS $EXPORTPATH >> /dev/null cd $EXPORTPATH cd .. # make tar.gz file for projekt tar -czvf projekt-R$REV-`date +%Y%m%d-%H%M%S`.tgz projekt >> /dev/null
Pokud budete chtít vyexportovat jen soubory co se změnili v poslední revizi bude to trochu složitější a budete potřebovat tento skript.
# path to export files EXPORTPATH=/tmp/test/ # url of repository REPOS=file:///home/user/repos/projekt/ # path to repository REPOSPATH=/home/user/repos/projekt/ # last revision REV="$( svnlook youngest $REPOSPATH )" # function to list and export file by file pathexport() # $1 { mkdir -p $EXPORTPATH${2%/*} svn export --force $1$2 $EXPORTPATH$2 } # make export path mkdir -p $EXPORTPATH # list all changed files for i in $( svnlook changed -r $REV $REPOSPATH ); do if [ "${#i}" -gt "2" ] then pathexport $REPOS $i fi done
Pokročilejší funkce
Vlastnosti
Vlastnosti (properties) umožňují uchovávat další informace o jednotlivých souborech. Nastavují se automaticky nebo ručně.
Mezi ty automatické patří od verze 1.5 takzvaný "merge tracking". Někteří klienti ho umí používat a zobrazují potom informace o tom kde co bylo spojeno.
Určitě si každý kdo listoval v projektech, které jsou zpracovávány pod Subversion, v hlavičce informace o verzi a autorovy ($Id: svn-kniha.xml 50 2009-07-20 15:25:15Z abtris $). Tato informace je generována automaticky pomocí vlastnosti svn:keywords=Id. Kromě Id může tato vlastnost nabývat více možností a to Author, Date, Revision a HeadURL. Pro verzi dokumentu se ale obvykle používá Id.
Příklad použití v PHP
<?php /** * Pridani obecne * @version SVN: $Id: svn-kniha.xml 50 2009-07-20 15:25:15Z abtris $ * @package Akce2008 * @filesource */
Vlastnosti projektu
U projektů se dá nastavit například integrace s systémem pro správu chyb (bug, issue tracker) a může být zcela libovolný, klidně jednoduchá aplikace napsaná v PHP nebo i profesionální jako je JIRA.
Migrace repozitory
Celé repozitory můžete uložit do souboru.
svnadmin dump repository >fileCelý soubor jde stejně dobře nahrát.
svnadmin load repository < fileVe windows můžete udělat export všech repozitory např. pomocí tohoto skriptu (přepínač –incremental revize jako diff proti předchozí verzi).
dir c:\rep /b /O /AD >dir1.txt
FOR /F %%M IN (dir1.txt) DO ( ECHO %%M svnadmin dump c:/rep/%%M --incremental >%%M.dmp zip -m -9 -g %%M.dmp.zip %%M.dmp )
Mirror repository pomocí svnsync
Pokud potřebujete read-only mirror, např. kvůli veřejné dostupnosti v případě Open Source projektů nebo jako zálohu má SVN od verze 1.4 nástroj svnsync.
V praxi potřebujete nejdříve mirror inicializovat a potom pravidelně spouštět synchronize, nejlépe post-commitem nebo cronem.
Pokud děláte mirror z nějakého staršího svn repozitory (existuje již několik let) tak můžete narazit na několik problémů s kterými poradím co dělat.
Inicializace mirroru
svnsync init file:///srv/svn/rep-mirror https://svn.firma.cz/svn/rep-zdroj \ --source-username svnuser --source-password svnpass \ --sync-username svnmirroruser --sync-password svnmirrorpass
Vlastní synchronizace
svnsync synchronize file:///srv/svn/rep-mirror \ --source-username svnuser --source-password svnpass \ --sync-username svnmirroruser --sync-password svnmirrorpass
Řešení možných problémů
Příkazy je lepší psát na jeden řádek, ale v linuxu by nemělo vadit ani rozdělení na více. U synchronizace mi to vyhodilo chybu a byl jsem nucen to dát na jeden řádek. Tady to pro přehlednost nechávám.
svnsync: Cannot accept 'svn:log' property because it is not encoded in UTF-8
Tato chyba bývá způsobena špatnými znaky v logu např. češtinou z windows kódování a je potřeba opravit záznam v svn:log.
Oprava log message se provede buď pomocí svn propset -r111 --revprop svn:log -F fixedlogfile nebo svnadmin setlog /srv/svn/rep-zdroj -r 111 fixedlogfile. Pro svn propset musíte mít povolený a nastavený pre-revprop-change hook skript.
svnsync: Cannot accept non-LF line endings in 'svn:log' property
Pokud se vyskytne tato chyba je potřeba upgradovat SVN server na verzi 1.6.3, kde už umí převádět konce řádků automaticky.
Branches a tags - větve a štítky
Tagy slouží pro zachování určité verze repozitory v čase. V angličtině tomu říkají snapshot. Udělá se jednoduše kopie vaší verze kterou chcete označit štítkem.
svn copy file:///C:/rep/rep_test/trunk file:///C:/rep/rep_test/tags/verze-1 \ -m "Verze 1 mého zkušebního projektu."
Tagy nemusí představovat nutně jen kopii v repozitory, ale můžete zachovat i například současnou pracovní kopii (wc). To se hodí pokud je projekt obsáhlý nebo projevuje chyby na které teď nemáte čas, ale chcete se k nim někdy vrátit.
svn copy c:/wc/test file:///C:/rep/rep_test/tags/problematicka-wc \ -m "Kopie mojí wc."
V TSVN je situace jednoduchá tam máte příkaz Branch/tag pomocí kterého vytvoříte příslušný tag nebo branch (větev). Jak je vidět z následujícího obrázku máte k dispozici několik voleb, které vám dávají možnost vytvořit kopii z HEAD (poslední verze v repozitory) nebo s libovolné verze kterou specifikujete číslem revize a nakonec z příslušné pracovní kopie projektu. Dole pak je volba, která umožní vám nejenom udělat kopii, ale také přepnout WC na vámi udělaný branch/tag. To se používá pokud vytváříte branch a chcete v ní pokračovat.
Pokud už víte co jsou tagy také vás nepřekvapí, že branches jsou v rámci repozitory jsou to samé jen se s nimi trochu jinak pracuje. Tagy slouží k zaznamenání určité 1 verze, ale branch slouží k tomu aby se dále upravovala, opravovala apod.
Uvedu jeden příklad např. projekt má 2 verze. Na verzi 2.0 se pracuje v /trunk a verze 1.0 je vydána v /tags/v1-0. Teď ale někdo najde ve verzi 1.0 chybu tak se vytvoří branch v /branches/1-0/ a pracuje se na odstranění chyb, udělá se několik commitů, ty se otestují a když je vše v pořádku vydá se verze v tags /tags/v1-1. Nezávisle na tom se pracuje na verzi 2. Možných schémat práce s větvemi je několik, toto byl jen příklad.
Merge v příkladech
Příkaz merge slouží ke spojování zdrojových kódů, v praxi většinou nastávají tyto případy:
-
Merge změn z nějaké branche do trunku. Pokud jste to opravili na jednom místě takto to přenesete i jinam.
svn merge --reintegrate file:///C:/rep/rep_test/branches/test
-
Reverzní merge, návrat ve trunku nebo větvi k předchozí verzi. Vrátíte zpět změny, které jste udělali mezi revizemi HEAD:80.
svn merge -r HEAD:80 file:///C:/rep/rep_test/trunk
-
Kompletní merge do pracovní kopie. Pomocí syntaxe URL@REV se dá přímo zadat revize. První URL (levá strana pro porovnání) a druhé URL (pravá strana pro porovnání) a cíl (pracovní kopie).
svn merge file:///C:/rep/rep_test/branches/test@150 \ file:///C:/rep/rep_test/branches/jiny-test@212 \ c:/wc/test
Pokud provádíte merge z příkazové řádky, hodí se také přepínač --dry-run s kterým si merge vyzkoušíte nanečisto. Informace o merge se dá zjistit také pomocí příkazu svn mergeinfo.
Integrace SVN s editory a IDE
Eclipse
Eclipse má nativně podporu jen pro CVS, pro Subversion musíte nainstalovat plugin Subclipse nebo Subversive, který používá například Zend Studio for Eclipse
Po delší zkušenosti s Zend Studiem doporučuji všem spíše Subversive.
NetBeans, Komodo IDE, SciTE a další
SVN řádkový klient se používá v mnoha editorech i v IDE. Jako ukázku tu mám obrázek z NetBeans, které poskytují celkem pěkný komfort a využívají jen řádkového klienta což přinese výhodu např. při vydání nové verze Subversion, stačí aktualizovat SVN klienta a nemusíte shánět podporu pro svoje IDE.
Komodo IDE patří ke komerčním editorům, který podporuje mnoho jazyků (PHP, Perl, Python, Ruby, Tcl, Javascript, Actionscript) a ze SCM podporuje kromě Subversion, Perforce a CVS.
JetBrains (RubyMine, PHPStorm, IntelliJ IDEA)
JetBrains mají velmi kvalitní IDE pro Javu, PHP, Ruby a další, kde je vestavěná podpora pro SVN, Git a další VCS.
Distribuované systémy pro správu verzí
Přechod od Subversion k Mercurial
Mercurial (hg) je další distribuovaný systém, který je napsaný v pythonu a podporuje ho například google ve svém code.google.com a také existuje hosting bitbucket.org, který umožňuje zdarma hosting open source projektů jako code.google.com nebo github.com pro git. Služby github.com a bitbucket.org mají také své placené varianty pro komerční využití.
Keywords v hg normálně nejsou, řeší se to přes standardní doplněk, který je potřeba zaplnout a nastavit v konfiguračním souboru .hgrc.
[extensions] hgext.keyword = keyword=/usr/share/python-support/mercurial-common/hgext/keyword.py [keyword] **.php = **.xml = [keywordmaps] RCSFile = {file|basename},v Author = {author|user} Header = {root}/{file},v {node|short} {date|utcdate} {author|user} Source = {root}/{file},v Date = {date|utcdate} Id = {file|basename},v {node|short} {date|utcdate} {author|user} Revision = {node|short}
Export - obdoba svn export je v hg příkaz archive, který ale umožňuje také vytvořit ze souborů přímo archív (zip, tar, tgz, tbz2).
hg archive path/to/dir/ hg archive -t zip /path/to/file.zip
Log v xml formátu kompatibilním se svn log --xml. Pro logování jsem vytvořil script, který umí to co standardní parametr xml v SVN. Parametrem scriptu je výstupní soubor.
# http://hgbook.red-bean.com/read/customizing-the-output-of-mercurial.html echo '<?xml version="1.0"?>\n<log>\n' >$1.xml hg log --template '<logentry revision="{rev}"> <author>{author|obfuscate}</author> <date>{date|isodate}</date> <msg>{desc|escape}\n</msg> <paths><path>{files}</path></paths> </logentry>\n' $1/ >>$1.xml echo '</log>\n' >>$1.xml
Spolupráce distribuovaných systému se Subversion
Některé distribuované systémy (git, bazaar a jistě další) mají utility, které umožnují, že lokálně pracujete jako s distribuovaným systémem, ale push provádíte do SVN repozitory.
Ukázka postupu v gitu (git-svn)
git svn clone file:///srv/svn/repos/test ... nějaké změny ... git commit -a git svn dcommit
Ukázka postupu v bazaar (bzr)
bzr checkout file:///srv/svn/repos/test bzr unbind ... nějaké změny ... bzr commit bzr bind bzr push file:///home/svn/repos/test
Tento postup lze zkrátit pomocí bzr commit --local potom nemusíme použít bind a unbind.
Nástroje pro práci se Subversion
Commit Monitor
Program Commit Monitor pro Windows umožňuje sledovat změny v repozitory, které si do něj zadáte a upozorní vás pokud někdo provede commit. Autorem je Stefan Küng (http://tools.tortoisesvn.net/). Podobný program je ještě například SVN Notifier.
Bohužel neznám podobnou aplikaci pro Linux, obvykle se to nahrazuje mailovou konferencí kam chodí automaticky všechny commity pro projekt.
Existují webové nástroje, které podobné informace poskytují o projektech. Google Code a Github například poskytuje RSS o změnách. Podobně třeba Trac nebo jiné systémy, které mají podporu pro SVN.
Případně si to můžete udělat sami, jako například já v PHP.
StatSVN
StatSVN je program napsaný v Javě a slouží k analýze logů. Stánout si ho můžete na http://sourceforge.net/projects/statsvn/.
Použití je potom jednoduché jako první parametr dáte log v xml formátu a jako druhý cestu k aktuální pracovní kopii a potom výstupní adresář pro generované html soubory.
java -jar statsvn.jar c:\rep\test\test_changelog.xml \ c:\rep\test\ -output-dir c:\tmp\test
Výstup potom vypadá jako na obrázku. Tento program je zdarma, ale umí většinu statických věcí podobně jako profesionální programy pro práci s repozitory jako je FishEYE i když není zdaleka tak v líbivém kabátě.
Generování changelogu pomocí svn2cl
Subversion utilita svn2cl je běžně dostupná v balíku subversion-tools v Debianu/Ubuntu.
Například pro generování changelogu pro tuto knihu se dělal takto:
/usr/bin/svn2cl --strip-prefix=trunk \ --break-before-msg=2 \ --group-by-day \ --separate-daylogs \ -i \ --authors=authors.xml \ file://localhost/svn/svn-kniha/trunk/ \ -o changelog.html \ --html
Soubor authors.xml obsahuje toto:
<?xml version="1.0" encoding="utf-8"?> <authors> <author uid="abtris"> Ladislav Prskavec <ladislav@prskavec.net> </author> </authors>
Výsledek v textové podobě vypadá nějak takto:
2009-06-17 Ladislav Prskavec <ladislav@prskavec.net> * [r35] changelog, changelog.html, html/apa.html, html/bi01.html, html/ch01.html, html/ch01s02.html, html/ch02.html, html/ch02s02.html, html/ch02s03.html, html/ch02s04.html, html/ch02s05.html, html/ch03.html, html/ch03s02.html, html/ch03s03.html, html/ch04.html, html/ch04s02.html, html/ch04s03.html, html/ch04s04.html, html/ch05.html, html/ch05s02.html, html/ch05s03.html, html/ch05s04.html, html/ch05s05.html, html/ch06.html, html/ch06s02.html, html/ch06s03.html, html/ch07.html, html/ch07s02.html, html/index.html, html/pr01.html, index.html, make.sh, svn-kniha.html, svn-kniha.xml, svn2html.css: Update generating. Link to changelog. * [r34] authors.xml, changelog, html/apa.html, html/bi01.html, html/ch01.html, html/ch01s02.html, html/ch02.html, html/ch02s02.html, html/ch02s03.html, html/ch02s04.html, html/ch02s05.html, html/ch03.html, html/ch03s02.html, html/ch03s03.html, html/ch04.html, html/ch04s02.html, html/ch04s03.html, html/ch04s04.html, html/ch05.html, html/ch05s02.html, html/ch05s03.html, html/ch05s04.html, html/ch05s05.html, html/ch06.html, html/ch06s02.html, html/ch06s03.html, html/ch07.html, html/ch07s02.html, html/index.html, html/pr01.html, make.sh, svn-kniha.html: Update generating, add make changelog ...
Literatura a použité zdroje
[SVN] Subversion. URL: http://subversion.tigris.org/.
[BZR] Bazaar VCS. URL: http://bazaar-vcs.org/.
[WIKISVN] Wikipedia Subversion. URL: http://cs.wikipedia.org/wiki/Subversion/.
[DB] Docbook. URL: http://www.docbook.cz.
SVN klienti
[TSVN] TortoiseSVN. URL: http://tortoisesvn.tigris.org/.
[SUBCLIPSE] Subclipse. URL: http://subclipse.tigris.org/.
[SUBVERSIVE] Subversive. URL: http://www.eclipse.org/subversive/.
[ANKHSVN] AnkhSVN. URL: http://ankhsvn.open.collab.net/.
[RSVN] RapidSVN. URL: http://rapidsvn.tigris.org/.
[VISUALSVN] VisualSVN : Subversion for Visual Studio. URL: http://www.visualsvn.com/visualsvn/.
SVN servery
[VSVN] VisualSVN server. URL: http://www.visualsvn.com/server/. Programovací prostředí - IDE
[ECLIPSE] Eclipse. URL: http://www.eclipse.org/.
[ZEND] Zend Studio for Eclipse. URL: http://www.zend.com/en/products/studio/.
[NB] NetBeans. URL: http://www.netbeans.org/.
[KOMODO] Komodo IDE. URL: http://www.activestate.com/Products/komodo_ide/.
[VS] MS Visual Studio. URL: http://msdn.microsoft.com/cs-cz/vstudio/.
Dokumentace
[SVNBOOK] SVN book. URL: http://svnbook.red-bean.com/.
Používané zkratky a anglické příkazy
DIR - adresář
FILENAME - název souboru
SVN - Subversion
TSVN - TortoiseSVN
REV - revize
ARG - argumenty
NAME - název
VALUE - hodnota
MESSAGE - zpráva
NUM - počet
PATH - cesta k souboru, repozitory, pracovní kopii
WC - pracovní kopie (working copy)
Alias - zkratka