Synchronizácia v Mercurial-i

Mercurial - remote synchronizationPouží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:

  • WinSCP (len Windows)
  • Krusader a množstvo iných súborových manžérov na Linuxe

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.

This entry was posted in Návody, Uncategorized and tagged , , . Bookmark the permalink.
  • http://www.webhostings.in/ web hosting

    Above the command is very helpful to me.All the points are explained very clearly.

  • http://www.webhostings.in/ web hosting in india

    This programming is very helpful for me…what you explained its good.

  • http://www.web-hosting-service.in/ hosting service

    It seems like a great idea and really informative post it was, I got some thing new here.

  • Marker

    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ý).
    Thomas Hardy