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.