O pracovných kópiách ste už čítali; teraz si ukážeme, ako ich klient Subversion vytvára a používa.
Pracovná kópia Subversion je obyčajný strom priečinkov vo vašom lokálnom systéme, ktorý obsahuje kolekciu súborov. Tieto súbory môžete ľubovoľne upravovať a ak sa jedná o súbory zdrojových kódov, môžete z nich obvyklým spôsobom zostaviť svoj program. Vaša pracovná kópia je vaša vlastná súkromná pracovná oblasť: Subversion nikdy nebude obsahovať zmeny iných ľudí ani nesprístupní vaše vlastné zmeny ostatným, pokiaľ im to výslovne nepoviete.
Po vykonaní zmien v pracovnej kópii a overení ich správneho fungovania vám Subversion poskytne príkazy zverejnenia vašich zmien ostatným ľuďom, ktorí s vami pracujú na vašom projekte (zápisom do úložiska). Ak iní ľudia zverejnia svoje vlastné zmeny, Subversion vám poskytne príkazy na zlúčenie týchto zmien do vášho pracovného priečinka (čítaním z úložiska).
Pracovná kópia obsahuje aj niekoľko súborov navyše, ktoré vytvoril a udržiava Subversion, aby im pomohol vykonávať tieto príkazy. Pracovná kópia obsahuje najmä podpriečinok s názvom .svn
, tiež známy ako pracovná kópia administratívny priečinok . Súbory v tomto administratívnom priečinku pomáhajú programu Subversion rozpoznať, ktoré súbory obsahujú nepublikované zmeny a ktoré súbory sú zastaralé, pokiaľ ide o prácu ostatných. Pred 1.7 Subversion udržiavané .svn
administratívne podpriečinky v každom priečinku verzie vašej pracovnej kópie. Subversion 1.7 má úplne odlišný prístup a každá pracovná kópia má teraz iba jeden administratívny podpriečinok, ktorý je bezprostredným potomkom koreňa tejto pracovnej kópie.
Typické úložisko Subversion často obsahuje súbory (alebo zdrojové kódy) pre niekoľko projektov; obvykle je každý projekt podpriečinkom v strome súborového systému úložiska. V tomto usporiadaní bude pracovná kópia používateľa obvykle zodpovedať konkrétnemu podstromu úložiska.
Predpokladajme napríklad, že máte úložisko, ktoré obsahuje dva softvérové projekty.
Inými slovami, koreňový priečinok úložiska má dva podpriečinky: paint
a calc
.
Ak chcete získať pracovnú kópiu, musíte overiť nejaký podstrom úložiska. (Termín overiť môže to znieť, akoby to malo niečo spoločné so zamykaním alebo rezervovaním zdrojov, ale nie je to tak; jednoducho vám vytvorí súkromnú kópiu projektu.)
Predpokladajme, že v ňom urobíte zmeny v button.c
. Keďže .svn
priečinok si pamätá dátum zmeny súboru a pôvodný obsah, Subversion môže zistiť, že ste súbor zmenili. Subversion však vaše zmeny nezverejní, kým im to výslovne nepoviete. Akt zverejnenia vašich zmien je všeobecne známejší ako odovzdanie (alebo overenie ) zmien v úložisku.
Ak chcete zverejniť svoje zmeny ostatným, môžete použiť Subversion odovzdať príkaz.
Teraz vaše zmeny v button.c
boli odovzdané do úložiska; ak si iný užívateľ overí pracovnú kópiu /calc
, uvidí vaše zmeny v najnovšej verzii súboru.
Predpokladajme, že máte spolupracovníčku Sally, ktorá si pozrela pracovnú kópiu /calc
v rovnakom čase. Keď odovzdáte svoju zmenu button.c
, pracovná kópia Sally zostáva nezmenená; Subversion upravuje pracovné kópie iba na žiadosť používateľa.
Sally môže požiadať Subversion o aktualizáciu projektu aktualizovaním svojej pracovnej kópie použitím príkazu Subversion aktualizovať. Vaše zmeny sa zapracujú do jej pracovnej kópie, ako aj do všetkých ďalších, ktoré boli odovzdané od jej overenia.
Všimnite si, že Sally nemusela určovať, ktoré súbory má aktualizovať; Subversion využíva informácie v priečinku .svn
a ďalšie informácie v úložisku, aby sa rozhodol, ktoré súbory je potrebné aktualizovať.
K úložiskám Subversion je možné pristupovať rôznymi spôsobmi - na lokálnom disku alebo cez rôzne sieťové protokoly. Umiestnením úložiska je však vždy adresa URL. Schéma adresy URL označuje spôsob prístupu:
Tabuľka 2.1. Prístupové adresy URL úložiska
Schéma | Metódy prístupu |
---|---|
file://
| Priamy prístup k úložisku na lokálnom, alebo sieťovom disku. |
http://
| Prístup cez protokol WebDAV na server Apache, ktorý podporuje Subversion. |
https://
| Rovnaké ako http:// , ale so šifrovaním SSL. |
svn://
| Neoverený prístup TCP/IP cez vlastný protokol k svnserve serveru. |
svn+ssh://
| autentizovaný, šifrovaný prístup TCP/IP cez vlastný protokol k svnserve serveru. |
Adresy URL Subversion väčšinou používajú štandardnú syntax, ktorá umožňuje špecifikovať názvy serverov a čísla portov ako súčasť adresy URL. The file: //
metóda prístupu sa zvyčajne používa na miestny prístup, aj keď ju možno použiť s cestami UNC k sieťovému hostiteľovi. URL má preto formu file://hostname/path/to/repos
. Pre miestny stroj je to hostname
časť adresy URL musí byť buď neprítomná, alebo localhost
. Z tohto dôvodu sa lokálne cesty zvyčajne zobrazujú s tromi lomkami, file:///path/to/repos
.
Taktiež užívatelia systému file://
na platformách Windows bude musieť používať neoficiálne “štandardnú” syntax pre prístup k úložiskám, ktoré sú na rovnakom stroji, ale na inej jednotke ako je aktuálna pracovná jednotka klienta. Kde bude fungovať ktorákoľvek z dvoch nasledujúcich syntaxí cesty URL
X
je jednotka, na ktorej sa nachádza úložisko:
file:///X:/path/to/repos ... file:///X|/path/to/repos ...
Upozorňujeme, že adresa URL používa bežné lomky, aj keď natívna (nie URL) forma cesty v systéme Windows používa spätné lomky.
K úložisku FSFS máte prístup cez zdieľanie v sieti, ale je to neodporúčané z rôznych dôvodov:
Poskytujete priamy prístup na zápis všetkým používateľom, aby mohli omylom vymazať alebo poškodiť systém súborov úložiska.
Nie všetky protokoly zdieľania súborov v sieti podporujú zamykanie, ktoré vyžaduje Subversion. Jedného dňa zistíte, že vaše úložisko bolo nenápadne poškodené .
Musíte nastaviť prístupové povolenia správnym spôsobom. SAMBA je v tomto ohľade obzvlášť ťažká.
Ak jedna osoba nainštaluje novšiu verziu klienta, ktorá inovuje formát úložiska, všetci ostatní nebudú mať prístup do úložiska, kým tiež neaktualizuje na novú verziu klienta.
Operácia SVN odovzdať môže publikovať zmeny v ľubovoľnom počte súborov a priečinkov ako jednu čiastkovú transakciu. V pracovnej kópii môžete meniť obsah súborov, vytvárať, odtraňovať, premenovávať a kopírovať súbory a priečinky a potom vykonať celú sústavu zmien ako celok.
V úložisku sa s každým potvrdením zaobchádza ako s čiastkovou transakciou: buď dôjde ku všetkým zmenám odovzdania, alebo k žiadnej z nich. Subversion si zachováva túto atomárnosť navzdory zlyhaniu programu, zlyhaniu systému, problémom so sieťou a akciám iných používateľov.
Zakaždým, keď úložisko prijme odovzdanie, vytvorí sa nový stav stromu súborového systému, ktorý sa nazýva revízia . Každej revízii je priradené jedinečné prirodzené číslo, o jedno väčšie ako číslo predchádzajúcej revízie. Počiatočná revízia čerstvo vytvoreného úložiska má číslovanie nula a pozostáva iba z prázdneho koreňového priečinka.
Príjemným spôsobom vizualizácie úložiska je séria stromov. Predstavte si pole čísel revízií, začínajúce od 0, ktoré sa tiahnu zľava doprava. Každé číslo revízie má pod sebou zavesený strom súborového systému a každý strom je “snímka” spôsobu, akým sa úložisko staralo o každé odovzdanie.
Je dôležité si uvedomiť, že pracovné kópie nie vždy zodpovedajú akejkoľvek jednej revízii v úložisku; môžu obsahovať súbory z niekoľkých rôznych revízií. Predpokladajme napríklad, že ste si skontrolovali pracovnú kópiu z úložiska, ktorého posledná revízia je 4:
calc/Makefile:4 integer.c:4 button.c:4
V súčasnosti tento pracovný priečinok presne zodpovedá revízii 4 v úložisku. Predpokladajme však, že urobíte zmenu v súbore button.c
a odovzdéte túto zmenu. Za predpokladu, že sa neuskutočnili žiadne ďalšie odovzdania, vytvorí sa vaše odovzdanie revíziu 5 úložiska a vaša pracovná kópia bude teraz vyzerať takto:
calc/Makefile:4 integer.c:4 button.c:5
Predpokladajme, že v tomto okamihu sa Sally odovzdáva zmeny súboru integer.c
, vytvorí revíziu 6. Ak použijete príkaz SVN aktualizácia, aby bola vaša pracovná kópia aktuálna, bude vyzerať takto:
calc/Makefile:6 integer.c:6 button.c:6
Zmena, vykonaná Sally v súbore integer.c
sa objaví vo vašej pracovnej kópii a vaša zmena bude stále prítomná v súbore button.c
. V tomto príklade je text z Makefile
je identický v revíziách 4, 5 a 6, ale Subversion označí vašu pracovnú kópiu Makefile
revíziou 6, čo značí, že je stále aktuálna. Takže po vašom vyčistení aktualizácie na vrchu pracovnej kópie bude všeobecne zodpovedať presne jednej revízii v úložisku.
Pre každý súbor v pracovnom priečinku Subversion zaznamená dve základné informácie v administratívnej oblasti .svn /
:
na ktorej revízii je založený váš pracovný súbor (nazýva sa to súbor pracovnej revízie ) a
časová pečiatka, kedy bola lokálna kópia naposledy aktualizovaná úložiskom.
Na základe týchto informácií môže Subversion rozhovorom s úložiskom zistiť, v ktorom z nasledujúcich štyroch stavov sa pracovný súbor nachádza:
Súbor sa v pracovnom priečinku nebol zmenený a od jeho pracovnej revízie neboli v úložisku vykonané žiadne zmeny. Odovzdanie súboru a príkaz aktualizovať súbor neurobia nič.
Súbor bol zmenený v pracovnom priečinku a žiadne zmeny súboru od jeho základnej revízie neboli odovzdané do úložiska. Existujú lokálne zmeny, ktoré neboli odovzdané do úložiska, teda odovzdanie súboru úspešne zverejní vaše zmeny a aktualizácia súboru neurobí nič.
Súbor sa nezmenil v pracovnom priečinku, ale zmenil sa v úložisku. Súbor by sa mal nakoniec aktualizovať, aby bol aktuálny s verejnou revíziou. Odovzdanie súboru neurobí nič a aktualizácia súboru zahrnie posledné zmeny do vašej pracovnej kópie.
Súbor bol zmenený v pracovnom priečinku aj v úložisku. Odovzdanie súboru zlyhá s chybou - zastaralé. Súbor by sa mal najskôr aktualizovať; príkazom aktualizovať sa pokúsi zlúčiť verejné zmeny s lokálnymi zmenami. Ak Subversion automaticky nemôže zmysluplne dokončiť zlúčenie, prenechá vyriešenie konfliktu užívateľovi.