Hlavní menu
Hlavní stránka Seznam rubrik Download Weblinks Ankety Top 15

  Kalendář
<<  Září  >>
PoÚtStČtSoNe
 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30     

Verzovací systém SVN a jeho zprovoznění na Windows
Datum vydání: 15. 10. 2008 (10036 přečtení)

  1. Používáte SVN nebo jiný verzovací systém v práci/ve škole a chce si udělat svůj doma?
  2. Chcete nějaký verzovací systém, ale nevíte jak ho správně nastavit a používat?
  3. Nevíte, co verzovací systém je, ale řešili jste některý z těchto problémů:
    1. Smazali jste si (nebo někdo jiný) důležitý soubor a potřebujete ho zpátky?
    2. Upravili jste (nebo někdo jiný) nějaký soubor, ale nyní se potřebujete dostat k jeho původní verzi nebo zjistit, co přesně se změnilo?
    3. Potřebujete měnit jeden soubor na více místech (doma, v práci, ve škole) nebo na souboru pracuje více lidí najednou?
Pokud jste alespoň jednou odpověděli "Ano", "Možná" či "Snad", čtěte dál...

Pokud znáte přímo SVN, můžete přeskočit na kapitolu "Instalace a nastavení", pokud rozumíte verzovacím systémům, ale chcete se dozvědět více o SVN, skočte na kapitolu "Zaostřeno na SVN". Pokud netušíte, co verzovací systém je, čtete hned dál.

Verzování? Proč?

V úvodu je uvedeno několik příkladů, které mohou vést k potřebě používat verzovací systém.

Smazání souboru a jeho obnova

Na tohle je celá řada "undelete" a "file restore" nástrojů a programů. Jejich schopnost obnovy je ale omezena a rapidně se snižuje s dobou, která uplynula od smazání a se zaplněním disku.

Verzovacímu systému se tohle stát nemůže. Z repository (neboli úložiště, jak se nazývá ukládací prostor systému) totiž není možné soubor fyzicky smazat (alespoň běžnými prostředky). I když tedy soubor označíte ke smazání, soubor stále zůstává v repository a je možno ho (určitými kroky), přivést "zpět k životu".

To s sebou ovšem přináší nemilou vlastnost, tzv. "bobtnání" - tedy velikost repository neustále narůstá a není možnost tomu zabránit. Pokud se ale rozhodnete pro verzovací systém, pravděpodobně budete mít i potřebu rezervovat pro něj dostatečný prostor (což při dnešní ceně HDD není velký problém).

Úprava souboru a návrat ke starší verzi

Některé programy tuhle možnost podporují, můžete např. znát "Předchozí verze" s Windows Vista nebo "Sledování změn" v MS Office souborech, vždy jde ale o omezené možnosti (např. časově omezené) a zpravidla jen na určitých souborech (např. nelze sledovat změny obyčejného TXT souboru).

Naopak verzovací systémy nic jiného neznají - tohle je vlastně důvod, proč se jim říká "verzovací". V repository se totiž neukládá pouze aktuální verze souboru (jako je tomu u HDD a jiných médií), ale ukládají se změny mezi jednotlivými verzemi. Aktuální (tedy ta poslední) verze je pak součet všech změn daného souboru.

Opět to znamená již zmíněné "bobtnání", ale za tuto cenu získáte silný nástroj: můžete si kdykoliv z repository stáhnout určitou verzi (např. "jak to vypadalo loni o vánocích?") a můžete mezi sebou jednotlivé verze porovnávat (např. "co se změnilo během minulého roku?"). Možná vám již došlo, proč nelze soubor skutečně smazat - smazání, z pohledu verzovacího systému, je pouze další změna souboru, která se projeví tím, že soubor "není vidět".

Současná práce více lidí

Nejčastějším důvodem zavedení verzovacího systému (ano, paradoxně to není ono verzování ;) je potřeba současné práce více lidí na stejných souborech. A přesně pro tenhle případ byly verzovací systémy navrženy. Každý totiž bezpodmínečně musí obsahovat možnost "Merge" (=sloučení, sjednocení).

Pokaždé, když do repository posíláte soubor (tato operace se jmenuje "Commit"), posíláte také číslo verze, kterou jste měnili. Pokud někdo jiný mezi tím tento soubor také změnil, dojde k tzv. "Kolizy". Tu ale ve většině případů dokáže systém sám vyřešit. Zpravidla dva lidé nepřipisují stejné řádky nebo slova v souboru a tak systém dokáže podle okolního stejného textu najít přímo místo změny a to uložit (místo přepsání celého souboru). Pouze v případě, že se změní stejné řádky souboru, je potřeba, aby uživatel (který právě posílá novou verzi) rozhodl, jaká změna se má vlastně provést.

Pracovní kopie

Abyste mohli pracovat se soubory uloženými v repository, musíte si na svůj počítač uložit tzv. "Pracovní kopii" (Working copy, někdy též WC). V ní provádíte následné změny a tyto pak posíláte zpět do repository.

Vytvoření pracovní kopie se říká "Checkout" (=vytažení; jinak znamená pokladna v obchodě). Pokud již máte pracovní kopii a pouze ji chcete aktualizovat na současnou verzi v repository, musí provést tzv. "Update" (=Aktualizace).

Další operace, které můžete dělat s pracovní kopií, jsou "Add" (přidání nového souboru do repository), "Delete" (označení souboru jako smazaný), "Diff" (porovnání dvou verzí), "Show log" (zobrazení popisků k jednotlivým změnám) a další.

Zaostřeno na SVN

SVN vychází ze staršího verzovacího systému CVS. Pokus znáte CVS, většina věcí vám bude připadat stejná nebo podobná.

SVN pracuje s celou repository jako s celkem. Pokud tedy commitnete jeden soubor, novou verzí se označí celá repository. To má výhodu v tom, že pro získání všech zdrojových kódů určité verze stačí znát jedno číslo verze (např. 135, nebo 1687) a není potřeba pamatovat si speciální tag, časový údaj nebo hash.

Nevýhodou verzování celého úložiště může být rychlý nárůst čísel verzí. To se dá ale obejít čím, že velký projekt rozdělíte do několika úložišť (např. oddělíte dokumentaci, knihovny apod.)

SVN (na rozdíl od CVS a jiných) dokáže soubory přejmenovávat, přesouvat a kopírovat. Přejmenování a přesouvání souborů probíhá interně pomocí příkazů Delete a Add, ale v logu se zobrazuje jako jedna akce Rename či Move. Navíc si nový soubor zachovává log a historii své původní verze.

Kopírování probíhá podobně jako přejmenování. Tedy všechny kopie souboru sdílejí historii svého originálu. Navíc zkopírováním okamžitě nezahlcujete úložiště, jelikož nová kopie sdílí se svým originálem i obsah. Do nové kopie se tak ukládají pouze nové změny.

SVN nepodporuje speciální tagy (např. STABLE_HEAD). Jediný používaný tag je HEAD, který odpovídá poslední verzi (resp. se HEAD používá jako podsložka, pokud chcete Branchovat) . Pro označení určité verze tagy nejsou potřeba, protože tomu odpovídá přímo určité číslo verze.

Pro větvení (Branch) lze jednoduše použít kopírování. V repository vytvoříte novou složku, do které nakopírujete všechny soubory. Tím nevzniknou nové soubory, ale pouze místo pro oddělené verzování (podobně jako větve např. v CVS). Je potřeba si ale uvědomit, že na rozdíl od CVS, kde má každá větev své číslování (např. 1.3.5.16), v SVN všechny větve mění číslo hlavní verze - což je opět nevýhoda v rychlém nárůstu čísel verzí.

Instalace a nastavení

Instalace SVNserve

Nejprve potřebujete binární soubory SVN serveru. Pro instalaci na Windows je nejlepší verze od CollabNet, která za vás udělá většinu nastavení. Až si ji stáhnete (z oficiálních stránek - nutná registrace - nebo verzi 1.5.2.2 z tohoto serveru).

Spusťte instalátor, proklikejte se přes pár úvodních obrazovek a dostanete se na stránku s volbou komponent. Doporučuji zvolit pouze SVNserve, což se server pracující s protokolem svn://. Druhá možnost je nainstalovat Apache pro přístup přes http:// (to ovšem není náplní tohoto návodu). Následující obrazovka pak obsahuje nastavení portu (výchozí pro svn:// je 3690) a adresu, která bude přes tento port přístupná (tedy místo, kam se budou ukládat všechny vaše repository - v jedné složce jich může být více ;) - například "c:\svn".

Instalace TortoiseSVN

Pro práci s SVN můžete použít příkazový řádek. Proč si ale znepříjemňovat práci, když můžete použít nástroj, který se přímo integruje do Windows průzkumníka a usnadňuje práci se složkami a soubory v repository (a hlavně Pracovní kopií). TortoiseSVN můžete stáhnout z oficiálních stránek nebo z tohoto serveru verzi 1.5.4.14259: 32bit nebo 64bit (pokud nevíte, pravděpodobně potřebujete 32bit verzi). A pokud vám nesvědčí angličtina, můžete si ještě stáhnout češtinu z oficiálních stránek (pod odkazem výše) nebo z tohoto serveru: 32bit nebo 64bit.

Nejprve nainstalujte program, následně pak balíček s češtinou. Program po instalaci vyžaduje restart, nemusíte však restartovat celé PC, ale stačí spustit Správce úloh (CTRL+ALT+DELETE), ukončit všechny "explorer.exe" procesy a následně zvolit Soubor > Nová úloha a zadat "explorer". Nyní klikněte na libovolný soubor nebo složku (vyjma systémových jako Tento Počítač) pravým tlačítkem a v menu by se mělo objevit podmenu TortoiseSVN. Z něho zvolte Settings a v otevřeném okně hned v první položce Language zvolte "čeština". Klikněte na OK a máte vše v češtině.

Opět můžete zvolit TortoiseSVN\Nastavení a projít ostatní položky. Především doporučuji nastavit, pokud používáte WinMerge nebo jiný nástroj, pod Externí programy hodnoty Prohlížeč Diff a Nástroje Slučování. Pod Překryv ikon\Sada ikon pak můžete zvolit jaké ikonky se budou objevovat v Průzkumníku souborů pro označení SVN složek (tedy Pracovních kopií) - doporučuji sadu XPStyle.

Vytvoření repository

Repository můžete vytvořit kdekoliv, ale pouze ty ve složce zadané při instalaci SVNserve budou přístupné přes svn:// adresu (k ostatním můžete přistupovat přes protokol file://). Přepněte se tedy do této složky a vytvořte novou složku. Pojmenujte ji podle potřeby - doporučuji nepoužívat speciální znaky, aby nevznikali problémy při komunikaci přes svn:// protokol; např. "MujPrvniProjekt" nebo "Hlavni_uloziste_dat". Až bude složka připravena, klikněte na ni pravým tlačítkem a zvolte "Vytvořit úložiště zde" ("Create repository here"). Tím se ve složce vytvoří všechny potřebné soubory a složky, aby mohla fungovat jako SVN Repository. Ve složce nic neměňte ani nemažte (kromě dále popsaných případů), můžete tím znehodnotit uložená data!

Nastavení přístupu

Pro každou repository musíte nastavit práva pro přístup. Ve výchozím nastavení totiž mohou všichni soubory číst (Checkout, Update), ale nikdo nesmí zapisovat (Commit, Add, Delete,...).

Jděte tedy do složky s příslušnou repository a otevřete soubor "/conf/svnserve.cnf". Ten má následující formát:

[general]
realm=Jméno repository
anon-access=read
auth-access=write
password-db=passwd
authz-db=authz
Jméno repository ("realm") je jméno či popis úložiště. Bude např. zobrazen při dotazu na přístupové heslo. Další dvě řádky určují přístup bez přihlášení ("anon-access") a s přihlášením ("auth-access"). Povolené hodnoty jsou "none" (přístup nepovolen), "read" (povoleno čtení ale ne zápis) a "write" (povoleno čtení i zápis).

Poslední dva řádky jsou potřeba, pokud jste omezili přístup na přihlašování. Oba řádky označují cestu k souboru (relativně ke složce "/conf"), kde jsou uloženy informace o uživatelích. Soubor "passwd" (řádek "password-db") obsahuje seznam uživatelů a jejich hesel (hesla nejsou šifrována!):

[users]
admin=heslo
user=heslo
Soubor authz (řádek "authz-db") omezuje přístup k jednotlivým složkám v repository:
[groups]
admins=admin1, admin2
users=@admins,user1,user2
[/private]
@admins=rw
@users=r
JoeBlack=rw
*=
[/public]
$authenticated=rw
$anonymous=r
Výše uvedený soubor definuje skupiny uživatelů "admins" a "users". Pak definuje, že do složky "private" uvnitř repository mohou zapisovat ("rw") pouze uživatelé ve skupině "admins" (všimněte si "@" před skupinou) a uživatel "JoeBlack". Členové skupiny "users" mohou tuto složku pouze číst ("r") a ostatní nemají žádný přístup (prázdná hodnota). Do složky "public" pak může zapisovat kdokoliv, kdo se přihlásil ("$authenticated"), a kdo se nepřihlásil ($anonymous), může pouze číst. V souboru je ještě podporován znak "~" znamenající opak - např. "~@admins" znamená všichni kromě admins.

Práce s Tortoise SVN

Nyní vám již nic nebrání ve vytvoření pracovní kopie a práci se soubory. TortoiseSVN můžete nainstalovat na jakýkoliv počítač, který má síťový přístup k SVN serveru.

Stažení pracovní kopie (WC)

Vytvořte prázdnou složku (mimo repository!), klikněte na ni pravým tlačítkem a zvolte SVN Získat (Checkout). Do URL úložiště zadejte adresu k repostory, tedy adresu počítače a jméno repository (příp. i jméno složky v ní). Např.: "svn://192.168.1.1/Repository1" nebo "svn://svnServer.com/Repository/nejaka/slozka".

Pole Získat složku je již vyplněno na zvolenou složku (příp. ji můžete změnit). Dále zvolte "Plně rekurzivně" (vytáhne všechny podsložky) nebo "Pouze tato složka" (pouze soubory, žádné složky). Pokud již máte data v repository, můžete určit i verzi. Po kliknutí na OK se stáhnout soubory do Pracovní kopie; pokud je však repository prázdná, nic se neuloží (to ovšem není chyba - soubory musíte nejprve přidat).

Příprava složek a souborů

Otevřete složku s Pracovní kopií a vytvořte dle potřeby nové složky a soubory (např. "data", "bin", "dokumentace", "readme.txt", apod.). Složky a soubory, které chcete uložit do repository, vyberte a klikněte pravým tlačítkem. Z TortoiseSVN menu zvolte Přidat (Add) a v okně potvrďte, že je chcete opravdu přidat (toto je důležité hlavně při práci s podsložkami). U složek se zobrazí ikonka (např. "+"). Nyní ale složky ještě nejsou v repository, pouze se připravili ke Commitu. Klikněte tedy pravým tlačítkem a zvolte SVN Odevzdat (Commit).

V otevřeném okně musíte zadat nějaký popis toho, co do repository posíláte. Tomuto záznamu se říká Log a slouží pro pozdější zjištění, co se vlastně změnilo. Dole je pak seznam souborů a složek, které se budou odesílat. Můžete je z Commitu vyřadit nebo dvojklikem porovnat s verzí v repository (pokud již existuje). Nakonec klikněte na OK a soubory budou odeslány. Na konci výpisu se zobrazí řádek "Dokončeno na revizi: 1". Ono číslo revize je důležité k tomu, pokud budete chtít později stáhnout tuto verzi nebo s ní porovnat aktuální verze souborů.

[Akt. známka: 2,13 / Počet hlasů: 8] 1 2 3 4 5
Autor: Nothrem Sinsky | Komentáře: 19127 | Přidat komentář | Informační e-mail Vytisknout článek

  Vyhledávání

Vyhledat text

RybolovUbytování CyklistéPenzionChalupa Nová BystřicePenzion Jižní ČechyJižní Čechy chataUbytování samotaKomorníkUbytováníStrmilovKunžakČeská Kanada ubytováníJindřichův Hradec chata

  Administrace
Administrace

  Copyright
2006 © Nothrem Sinsky

Tento web byl vytvořen pomocí redakčního systému phpRS
Layout: SandStorm - verze 0.9.0
based on layout Beach - verze 1.1.0