Kategória: Linux a sieť

Zmenené: 28. august 2010

Subversion - klient

../../_images/subversion_logo.png

Subversion je systém pre správu verzií, ktorý pracuje na princípe klient-server. Ako s takýmto klientom pracovať?

Inštalácia

Inštalácia je v Debiane jednoduchá:

apt-get install subversion

Inštalácia vo Wnindows nie je zložitejšia, z domovskej stránky si stiahnite inštalačný balíček (ten so slovom setup v názve) a nainštalujte ho štandardným spôsobom. Po inštalácii je potrebné znovu-načítanie premenných prostredia (najjednoduchší je reštart). Podotýkam, že sa jedná o textového klienta.

Používanie

Po nainštalovaní sa môžete oboznámiť so syntaxou a dostupnými príkazmi v nápovede:

svn help
usage: svn subcommand [options] [args]
Subversion command-line client, version 1.5.1.
Type 'svn help subcommand' for help on a specific subcommand.
Type 'svn --version' to see the program version and RA modules
  or 'svn --version --quiet' to see just the version number.

Pred začiatkom práce je dobré vytvoriť si samostatný adresár, do ktorého budú ukladané všetky pracovné kópie SVN stromov, ďalej sa na neho budem odkazovať ako na svnroot.

Vytvorenie pracovnej kópie

Pracovnú kópiu vetvy SVN do adresára fpcdir vytvoríte pomocou príkazu:

svn checkout svn://lazarus.frepascal.org/fpc/trunk fpcdir

Aktualizácia pracovnej kópie

Aktualizáciu pracovnej kópie môžete vykonať v adresári pracovnej kópie pomocou príkazu:

svn update

alebo v nadradenom adresári, pomocou:

svn update fpcdir

Túto možnosť využijete, napríklad ak máte v adresári svnroot viacero stromov a chcete ich aktualizovať všetky naraz pomocou jedného príkazu:

svn update fpcdir lazarus

Ale v ďalšom texte budem predpokladať, že sa nachádazate v adresári pracovnej kópie stromu SVN. Predchádzajúce dva príkazy zaktualizujú pracovnú verziu na najnovšiu verziu, ak chcete aktualizáciu na konkrétnu verziu môžete zadať pomocou parametra -r číslo revízie, na ktorú chcete aktualizovať:

svn update r 13925

Niekedy nie je potrebná aktualizácia celého stromu, preto takto môžete aktualizovať aj konkrétny súbor (localize.sh):

svn update r 13254 localize.sh

Výstup príkazu Update

Výstup príkazu na aktualizáciu môže vyzerať takto:

svn update
A    lazarus\components\paradox
A    lazarus\components\paradox\demo
U    lazarus\tools\install\win\environmentoptions-win64.xml
U    lazarus\ide\dialogprocs.pas
A    lazarus\packager\globallinks\lazparadox-0.lpl
Updated to revision 13925.

V prvom stĺpci výstupu je popis akcie, ktorú SVN so súborom pri aktualizácii vykonal

  • A – súbor (adresár) bol pridaný (Added) do pracovnej kópie;
  • D – súbor (adresár) bol zmazaný (Deleted) z pracovnej kópie;
  • U – súbor bol aktualizovaný (Updated);
  • G – súbor prijal nové zmeny (merGed);
  • C – súbor v konflikte (Conflict). Zmeny zo servera sú vykonané priamo na riadkoch, ktoré sme upravovali. S týmto konfliktom si SVN neporadilo a tak to prenecháva na vyriešenie človeku.

Zobrazenie stavu

Príkaz svn status Vám poskytne výpis zmien, ktoré nastali v pracovnej kópii oproti originálu:

svn status
A     lazarus
C     lazbuild
D     ppas.sh
M     ideintf/languages/objinspstrconsts.sk.po

Kde písmená na začiatku riadku znamenajú:

  • A – položka bude pridaná do úložiska (teda ešte neexistuje na serveri (aj!));
  • C – položka je v konflikte, čiže zmeny na serveri a vo vašej kópia sa prekrývajú;
  • D – položka bude zmazaná z pracovnej kópie;
  • M – obsah súbor bol zmenený;
  • U – položka bude aktualizovaná (na serveri je novšia verzia).
  • L – položka je zamknutá (napríklad iným procesom svn);
  • R – položka presunutá na iné miesto;
  • ? – položka sa vyskytuje len v pracovnej kópii (na serveri nie);
  • ! – položka v chýba v pracovnej kópii (na serveri je);
  • ~ – položka nie je v podobe, v akej by mala byť (napr. má to byť súbor, ale je to adresár, či naopak).

Pričom sa môžete stretnúť až s tromi písmenami za sebou, prvé udáva stav obsahu, druhé stav vlastností a tretie má vzťah k uzamknutiu súboru. Príkazu svn status môžete pridať aj cestu, aby ste získali stav konkrétneho súboru alebo adresára, pričom príkaz:

svn status languages

poskytne výpis stavu pre položky v adresári languages. Ak Vám takýto výpis neposkytol postačujúce údaje, skúste rozšírený výpis pridaním parametra -v:

svn status -v languages
A       13913    13856 vincents     languages/lazaruside.zh_CN.po
M       13913    13856 vincents     languages/lazaruside.ua.po
M       13913    13856 vincents     languages/lazaruside.es.po
C       13913    13856 vincents     languages/lazaruside.sk.po
D       13913    11139 marc         languages/installerstrconsts.pb.po
  • Prvý stĺpec má rovnaký význam ako pri normálnom výpise
  • Druhý stĺpec udáva číslo revízie pracovnej kópie
  • Tretí stĺpec udáva, v ktorej revízii nastali zmeny
  • Štvrtý stĺpec udáva kto urobil zmenu.

Ak Vám nestačia ani tieto údaje, skúste ešte pridať parameter -u :

svn status -u -v
A        13913    13856 vincents     languages/lazaruside.zh_CN.po
M        13913    13856 vincents     languages/lazaruside.ua.po
M  *     13913    13856 vincents     languages/lazaruside.es.po
C        13913    13856 vincents     languages/lazaruside.sk.po
D        13913    11139 marc         languages/installerstrconsts.pb.po
Status against revision:  13926

Hviezdičky v druhom stĺpci udávajú, ktoré súbory budú pri aktualizácii naozaj aktualizované, v tomto prípade dva.

Zobrazenie rozdielov

Ak si chcete pozrieť aké rozdiely medzi pracovnou kópiou a úložiskom, môžete použiť príkaz svn diff. Príkaz zobrazí nie len rozdiely v obsahu ale aj zmeny vlastností:

svn diff

Samozrejme, aj tomuto príkazu môžete ako parameter pridať cestu k súboru, a potom získate rozdiely len pre zadaný súbor(y):

svn diff languages/lazaruside.sk.po

Pomocou parametra -r si môžete nechať zobraziť rozdiely pracovnej kópie oproti konkrétnej revízii úložiska:

svn diff -r 9335 languages/lazaruside.sk.po

prípadne aj zmeny medzi jednotlivými revíziami:

svn diff -r 9335:12266 languages/lazaruside.sk.po

Príkaz svn diff môžete využiť aj na vytváranie záplat (patch), jednoduchým presmerovaním výstupu do súboru:

svn diff > mypatch.diff

Zrušenie vykonaných zmien

Ak sa chcete vrátiť k pôvodnej revízii, teda zahodiť všetky Vami vykonané zmeny, zadajte:

svn revert

Tento príkaz vráti zmeny v obsahu i vlastnostiach súborov.

Zapísanie zmien do úložiska

Po skončení práce, budete pravdepodobne chcieť zapísať jej výsledok do úložiska, teda pridať novú revíziu. Na to slúži príkaz svn commit:

svn commit

Na zapísanie zmien do úložiska musíte samozrejme mať prístup pre zápis. Nie všetky verejné SVN úložiská umožňujú anonymný zápis. Napríklad aj úložisko Lazarus je len na čítanie, ale v dokumentácii nájdete popis ako posielať zmeny.

Pridanie súboru do úložiska

V prípade potreby pridania súboru do úložiska poslúži príkaz svn add:

svn add cesta_k_súboru

Súbory nebudú pridané ihneď, ale pri ďalšej aktualizácii (commit) úložiska.

Odstránenie súboru z úložiska

Inokedy je potrebné súbor z úložiska odstrániť, na tento účel je určený príkaz svn delete:

svn delete cesta_k_súboru

Aj v tomto prípade nastane reálne odstránenie súboru až pri najbližšej aktualizácii úložiska. Možné je aj okamžité zmazanie súborov z úložiska, a to pomocou zadania ich URL namiesto cesty k súboru.

Export pracovnej kópie

Niekedy môžete potrebovať vytvorenie ďalšej verzie pracovného adresára, na to slúži príkaz:

svn export iny/adresar

pomocou tohoto príkazu vyexportujete obsah pracovnej kópie do zadaného adresára, ale bez lokálne vytvorených súborov, čiže čistej kópie a to aj bez administratívnych adresárov SVN. V takejto kópii potom môžete napríklad prekladať svoju verziu programu.

Pokiaľ chcete exportovať do existujúceho adresára je potrebné pridať parameter –force, napríklad:

svn export /usr/share/lazarus --force

Exportovať možno aj časť stromu:

svn export languages niekde/inde/languages

Autentifikácia

Pre čítanie bývajú SVN úložiská často prístupné aj pre anonymných používateľov, čiže nie je potrebné sa autentifikovať. Avšak v mnohých prípadoch je to pri zápise naopak. V takom prípade je možné zadať meno a heslo priamo do príkazu:

svn commit --username meno --password heslo

Ak tieto parametre zadané nie sú, ale sú potrebné, tak si ich svn vyžiada.

Práva súborov

Na zmenu práv súboru je možné použiť príkaz propset, ktorý sa postará o zmenu vlastností súboru, takže napríklad pridanie práva x by mohlo vyzerať takto:

svn propset svn:executable "*" detect-autoconf.pl

alebo naopak, na odstránenie tohoto práva:

svn propdel svn:executable detect-autoconf.pl

Ďalšie podrobnosti sú dostupné pomocou svn help propset alebo propdel.

Manipulácia so súbormi

Pri práci s úložiskom SVN nastane, skôr alebo neskôr, situácia, keď je treba nie len zmeniť obsah existujúceho súboru, ale súbory do úložiska pridávať, odstraňovať, či ich kopírovať alebo presúvať. Na toto nestačí jednoducho premenovať, či pridať súbor v pracovnej kópii, ale tieto zmeny treba zapísať do úložiska.

Pridanie súboru

svn add <súbor>

Zmazanie súboru

svn delete <súbor>

Premenovanie/presun súboru

svn rename <starý_súbor> <nový_súbor>

Kopírovanie súboru

svn copy <pôvodný_súbor> <nový_súbor>

Po ktorejkoľvek operácii, ktorá manipulujú so súbormi je samozrejme reálny zápis do úložiska urobený až po zadaní príkazu svn commit .