Už jste četli o pracovních kopiích, nyní budeme demonstrovat, jak je klient Subversion vytváří a využívá.
Pracovní kopie Subversion je obyčejný stromový adresářů na vašem lokálním systému, který obsahuje sadu souborů. Tyto soubory můžete upravovat, jak chcete a pokud jsou to soubory zdrojového kódu, je můžete z nich i kompilovat svůj program obvyklým způsobem. Vaše pracovní kopie je Váš vlastní soukromý pracovní prostor: Subversion nikdy nevčlení změny jiných lidí, ani nezpřístupní Vaše vlastní změny ostatním, pokud si to výslovně nepřejete.
Poté, co jste provedli nějaké změny v souborech v pracovní kopii a ověřili jste, že správně fungují, Subversion vám poskytuje příkazy jak zveřejnit Vaše změny pro ostatní, kteří s Vámi spolupracují na tomto projektu (zápisem do úložiště). Pokud ostatní zveřejní své vlastní změny, Subversion Vám nabízí příkazy sloučit tyto změny do Vašeho pracovního adresáře (čtením z úložiště).
Pracovní kopie také obsahuje i některé další soubory, vytvořené a udržované Subversion, na pomoc při provádění těchto příkazů. Zejména vaše pracovní kopie obsahuje podadresář .svn
, také známý jako správcovský adresář pracovní kopie. Soubory ve správcovském adresáři pomáhají Subversion poznat, které soubory obsahují nezveřejněné změny a které jsou zastaralé s ohledem na práci ostatních. Před verzí 1.7 Subversion měl správcovské podadresáře .svn
v každém adresáři s verzí ve vaší pracovní kopii. Subversion 1.7 má úplně jiný přístup a každá pracovní kopie má pouze jeden správcovský podadresář, která je přímo podřazen kořeni této pracovní kopie.
Typické úložiště Subversion často obsahuje soubory (nebo zdrojový kód) několika projektů; obvykle, každý projekt je podadresář v souborovém systému stromu úložiště. V tomto uspořádání bude pracovní kopie uživatele obvykle odpovídat konkrétnímu podstromu úložiště.
Předpokládejme například, že máte úložiště, které obsahuje dva softwarové projekty.
Jinými slovy, kořen adresáře úložiště má dva podadresáře: barva
a kalkul
.
Chcete-li získat pracovní kopii, nejdříve musíte získat některý podstrom úložiště. (Termín získat může znít, že má něco společného s blokováním nebo vyhrazením prostředků, ale to není pravda; jednoduše vytvoří vaši soukromou kopii projektu)
Předpokládejme, že provedete změny v tlacitko.c
. Vzhledem k tomu, že adresář .svn
si pamatuje datum změny souboru a původní obsah, Subversion může zjistit, že jste změnili soubor. Nicméně, Subversion změny veřejnými, dokud mu to výslovně neřeknete. Akt publikování změn je více znám jako odevzdání (nebo zapsání) změn do úložiště.
Chcete-li publikovat své změny pro ostatní, můžete použít Subversion příkaz odevzdat.
Nyní Vaše změny v tlacitko.c
byly odevzdány do úložiště, pokud jiný uživatel získá pracovní kopii /Kalkul
, uvidí Vaše změny v nejnovější verzi souboru.
Předpokládejme, že máte spolupracovníka, Lízu, která získala pracovní kopii /Kalkul
ve stejnou dobu jako Vy. Když jste odevzdal své změny tlacitko.c
, Lízina pracovní kopie je ponechána beze změny; Subversion mění pracovní kopie pouze na žádost uživatele.
Aby její projekt byl aktuální, Líza může požádat Subversion o aktualizaci její pracovní kopie, pomocí Subversion příkazu aktualizovat. To zahrne Vaše změny do její pracovní kopie, jakož i změny všech ostatních, které byly odevzdány, od doby získání kopie.
Všimněte si, že Líza nemusela určit, které soubory se mají aktualizovat; Subversion používá informace v adresáři .svn
a další informace v úložišti, k určení, které soubory je třeba aktualizovat.
K úložištím Subversion lze přistupovat pomocí mnoha různých metod - na lokálním disku, nebo prostřednictvím různých síťových protokolů. Avšak umístění úložiště je vždy URL. Schéma URL udává přístupové metody:
Tabulka 2.1. Přístupová URL úložiště
Schéma | Metoda přístupu |
---|---|
file://
| Přímý přístup k úložišti na místním nebo síťovém disku. |
http://
| Přístup přes protokol WebDAV na Apache server se Subversion |
https://
| Stejné jako http:// , ale s šifrovaním pomocí SSL. |
svn://
| Neověřený přístup TCP/IP přes vlastní protokol na server svnserve . |
svn+ssh://
| ověřený, zašifrované přístup TCP/IP přes vlastní protokol na server svnserve . |
Většinou, Subversion URL používají standardní syntaxi, která umožňuje jména serverů a čísla portů být zadána jako součást adresy URL. Přístupová metoda file://
se běžně používá pro lokální přístup, ačkoli může být použita s cestami UNC k síťovému hostiteli. URL tedy nabývá formy file://hostname/path/to/repos
. Pro místní počítač, je část URL hostname
buď vynechána, nebo je localhost
. Z tohoto důvodu místní cesty mají obvykle tři lomítka, file:///path/to/repos
.
Rovněž uživatelé protokolu file://
na platformách Windows, budou muset používat neoficiálně „standardní“ syntaxi pro přístup k úložištím, které jsou na stejném počítači, ale na jiném disku, než je klientova aktuální pracovní jednotka. Jeden ze dvou následujících syntaxí cesty URL bude fungovat, když X
je jednotka, na které je úložiště:
file:///X:/cesta/k/úložišti ... file:///X|/cesta/k/úložišti ...
Všimněte si, že URL používá obyčejná lomítka, i když nativní (ne URL) forma cesty v systému Windows používá zpětná lomítka.
Do FSFS úložiště můžete vstupovat přes sdílenou sít, ale toto není z různých důvodů doporučeno:
Každému uživateli dáváte přímý přístup k zápisu do úložiště, takže jakýkoliv uživatel může omylem vymazat celé úložiště nebo nějakým jiným způsobem ho poškodit.
Ne všechny síťové protokoly pro sdílení souborů podporují zamykání, které Subversion potřebuje. Jednoho dne můžete zjistit, že vše úložiště bylo nenápadně poškozeno.
Oprávnění přístupu musíte nastavit hned. SAMBA je v tomto ohledu zvláště nepříjemná.
Pokud jedna osoba nainstaluje novou verzi klienta, která aktualizuje formát úložiště, pak všichni ostatní nebudou mí přístup k úložišti, dokud také nenainstalují novou verzi klienta.
Operace odevzdání může publikovat změny v libovolném počtu souborů a adresářů jako jediný atomový přenos. Ve vaší pracovní kopie, můžete měnit obsah souborů, vytvořit, smazat, přejmenovávat a kopírovat soubory a adresáře a pak odevzdat kompletní sadu změn jako celek.
V úložišti, každé odevzdání se považuje za atomové transakce: buď dojde ke všem změnám v odevzdání, nebo nedojde k žádné. Subversion zachovává tuto atomizaci navzdory pádům programu, zhroucení systému, problémy se sítí, a činnostmi jiných uživatelů.
Pokaždé, když úložiště přijme odevzdání, vytvoří se nový stav stromu souborového systému, který se nazývá revize. Ke každé revizi je přiřazeno unikátní přirozené číslo, o jedno větší než předchozí revize. Výchozí revize z čerstvě vytvořeného úložiště je očíslována nulou a neobsahuje nic kromě kořenového adresáře.
Hezký způsob, jak si úložiště představit je jako řadu stromů. Představte si řadu revizi čísel od 0, rozprostírající se zleva doprava. Každá revize má číslo stromu souborového systému visící pod ním a každý strom je „snímek“ úložiště jak vypadalo po každém odevzdání.
Je důležité si uvědomit, že pracovní kopie ne vždy odpovídají každé jednotlivé revizi v úložišti; mohou obsahovat soubory z několika různých revizí. Například předpokládejme, že byste získali pracovní kopii z úložiště, jejíž nejnovější revize je 4:
kalkul/Makefile:4 celecislo.c:4 tlacitko.c:4
V současné době tento pracovní adresář, přesně odpovídá revizi 4 v úložišti. Předpokládejme však, že uděláte změnu v tlacitko.c
a odevzdáte tuto změnu. Za předpokladu, že k žádným jiným odevzdáním nedošlo, Vaše odevzdání vytvoří 5. revizi úložiště, a vaše pracovní kopie bude nyní vypadat takto:
kalkul/Makefile:4 celecislo.c:4 tlacitko.c:5
Předpokládejme, že v tomto okamžiku, Líza odevzdá změnu celecislo.c
a tím vytvoří revizi 6. Pokud používáte svn update, aby Vaše pracovní kopie zůstala aktuální, pak to bude vypadat takto:
kalkul/Makefile:6 celecislo.c:6 tlacitko.c:6
Líziny změny souboru celecislo.c
se objeví ve Vaší pracovní kopii a Vaše změny stále budou přítomny v tlacitko.c
. V tomto příkladu, text Makefile
je totožný s revizí 4, 5 a 6, ale Subversion označí vaší pracovní kopii Makefile
s revizí 6 aby naznačil, že je stále aktuální. Takže poté, co provedete čistou aktualizaci v nejvyšší části Vaší pracovní kopie, bude zpravidla odpovídat přesně jedné revizi v úložišti.
U každého souboru v pracovním adresáři, Subversion zaznamenává dva základní druhy informací ve správní oblasti .Svn/
:
na jaké revizi je Váš pracovní soubor založen (toto se nazývá pracovní revize souboru) a
časové razítko ukazující, kdy byla místní kopie naposledy aktualizovány úložištěm.
Vzhledem k této informaci, mluvením s úložištěm, může Subversion říct, ve kterém z těchto čtyř stavů se pracovní soubor nachází:
Soubor je v pracovním adresáři nezměněn a žádné změny tohoto souboru nebyly odevzdány do úložiště od jeho pracovní verze. Odevzdáním tohoto souboru nebo aktualizací tohoto souboru se nic nestane.
Soubor byl změněn v pracovním adresáři a žádné změny do tohoto souboru nebyly odevzdány do úložiště od jeho počáteční revize. Existují lokální změny, které nebyly odevzdány do úložiště, tudíž odevzdání souboru úspěšně publikuje Vaše změny a aktualizace tohoto souboru nic neprovede.
Soubor nebyl změněn v pracovním adresáři, ale byl změněn v úložišti. Soubor by měl být časem aktualizován, aby byl aktuální s veřejnou revizí. Odevzdání tohoto souboru nic neprovede a aktualizace tohoto souboru zahrne poslední změny do Vaší pracovní kopie.
Soubor byl změněn a to jak v pracovním adresáři tak i v úložišti. Odevzdání tohoto souboru bude hlásit chybu zastaralé. Soubor by měl být nejdříve aktualizován; Příkaz aktualizovat se pokusí sloučit veřejné změny se změnami místními. Pokud Subversion nemůže dokončit sloučení přijatelným způsobem automaticky, je ponecháno na uživateli, aby vyřešil konflikt.