Používaním Mercurial-u je vyriešený základný problém – ako jednotliví vyvojári synchronizujú svoju prácu na spoločnom projekte. Synchronizáciu s repozitárom druhého developera spravíme pomocou:
hg pull ssh://login@192.168.1.1//cesta/k/projektu/tam hg update
prípadne, ak pracujeme na rozdielnych vetvách, namiesto hg update zadáme
hg merge
Problém nastáva vtedy, keď takýto projekt zavesíme na server, na ktorom Mercurial nie je nainštalovaný. Na synchronizáciu adresárov cez FTP existuje niekoľko nástrojov:
Ich základným problémom je, že pri veľkých projektoch so stovkami adresárov a tisíckami súborov sú pomalé. K dispozícii máme niekoľko lepších riešení.
hg pack
Pack je rozšírenie pre Mercurial, ktoré stiahneme tu. Súbor rozbalíme do vhodného adresára (na Linuxe napr. do ~/.hg/extensions/pack.py) – na ceste nezáleží. V Mercurial-i zapneme tento plugin v jeho konfiguračnom súbore .hgrc (na Linuxe je umiestnený v ~/.hgrc). Ak súbor ešte neexistuje, vytvoríme ho. Do súboru zapíšeme:
[extensions] pack = ~/.hg/extensions/pack.py
(Cestu k pluginu nahradíme aktuálnou cestou podľa toho, kam sme rozbalili stiahnutý balík.
K dispozícii teraz máme nový príkaz, pomocou ktorého vyexportujeme všetky súbory zmenené v konkrétnej revízii.
mkdir /tmp/export hg pack /tmp/export
Do zadaného adresára sa skopírujú všetky súbory zmenené a pridané v poslednej revízii projektu. Tie možno nahrať na cieľový server cez FTP. (Súbory sú skomprimované do ZIP archívu, takže pred nahraním na FTP server ich pravdepodobne budeme potrebovať rozbaliť.)
Je možné špecifikovať číslo revízie, pre ktorú pack exportuje zmenené súbory:
hg pack /tmp/export -r 25
Nevýhodou používanie tohto pluginu je, že nedokážeme synchronizovať zmazané súbory a adresáre. Ďalším nedostatkom je, že pack dokáže exportovať zmeny len pre jedinú revíziu.
hg exportfiles
Tento plugin je veľmi podobný pluginu pack, s dvoma rozdielmi:
- je možné naraz exportovať viacero revízií
- exportované súbory a adresáre nie sú skomprimované (je možné ich priamo nahrať na FTP server)
Plugin stiahneme tu a rozbalíme do vhodného adresára (napr. na Linuxe do ~/.hg/extensions/exportfiles.py). Otvoríme súbor ~/.hgrc a pridáme doň:
[extensions] exportfiles = ~/.hg/extensions/exportfiles.py
Tým máme k dispozícii príkaz exportfiles, ktorý môžeme použiť nasledovne:
hg exportfiles /tmp/export # exportuje ostatnú revíziu hg exportfiles /tmp/export -r 25 # exportuje revíziu 25 hg exportfiles /tmp/export -r 25:35 # exportuje revízie 25-35
Exportované súbory a adresáre nakopírujeme na FTP server.
Opäť platí, že týmto spôsobom nemožno synchronizovať vymazanie súborov a adresárov.
rsync
Na Linuxových systémoch máme k dispozícii pokročilý nástroj na vzdialenú synchronizáciu – rsync (remote synchronization). Podmienkou je, aby sme na vzdialený server mohli pristupovať cez SSH. Na rozdiel od predošlých riešení, rsync umožňuje aj synchronizáciu zmazaných súborov a adresárov, preto by mal byť voľbou číslo jeden pre vzdialenú synchronizáciu projektov (ak je dostupný).
Ak rsync nie je na našom systéme prítomný, nainštalujeme ho napr. na Ubuntu/Debiane pomocou:
sudo apt-get install rsync
Bežnú synchronizáciu potom uskutočníme nasledovne:
rsync --progress \
--verbose \
--update \
--delete \
--archive \
--rsh=ssh \
--exclude=".hg/" \
~/moj_lokalny_projekt \
login@password:/cesta/k/projektu/na/serveri
Prepínač –exclude môžeme zadať viackrát, pre vylúčenie neželaných adresárov zo synchronizácie. Rsync poskytuje veľké množstvo nastavení, preto vrele odporúčam štúdium manuálu.
man rsync
Ďalšie riešenia pre FTP synchronizáciu
Dobrým nástrojom pre FTP synchronizáciu z príkazového riadka je lftp (dostupný na Linuxe). Nainštalujeme ho pomocou
sudo apt-get install lftp
Pre synchronizáciu si vytvoríme skript rsync.sh s právami 755:
touch rsync.sh chmod 755 rsync.sh
rsync.sh otvoríme v textovovom editore a vložíme:
#!/bin/bash USER="login" PASS="moje_heslo" HOST="192.168.1.1" SOURCE=`pwd` DESTINATION="/cesta/k/projektu/na/servri" lftp -c "set ftp:list-options -a; open ftp://$USER:$PASS@$HOST; lcd $SOURCE; cd $DESTINATION; mirror --reverse \ --delete \ --verbose=3 \ --only-newer \ --parallel=2 \ --exclude '^\.hg\/' "
Nezabudneme upraviť nastavenia USER, PASS, HOST a DESTINATION. Skript uložíme priamo v adresári projektu a spustíme ho:
cd /moj_projekt ./rsync.sh
Spustí sa synchronizácia, ktorá pri väčších projektoch zaberie niekoľko minút. Pre ďalšie nastavenia programu lftp opäť odporúčam nazrieť do manuálu.