Subversion všeobecne funguje najlepšie bez zamykania použitím metód “Kopírovať, upraviť, zlúčiť” opísaných predtým v časti “Riešenie Kopírovať-Upraviť-Zlúčiť”. Existuje však niekoľko prípadov, keď budete musieť implementovať určitú formu politiky zamykania.
Používate “nezlúčiteľné” súbory, napríklad grafické súbory. Ak dvaja ľudia zmenia ten istý súbor, zlúčenie nie je možné, takže jeden z vás stratí svoje zmeny.
Vaša spoločnosť v minulosti vždy používala systém kontroly revízií zamykania a vedenie spoločnosti prijalo rozhodnutie, že “zamykanie je najlepšie” .
Najskôr sa musíte ubezpečiť, že je váš server Subversion inovovaný minimálne na verziu 1.2. Staršie verzie uzamykanie vôbec nepodporujú. Ak používate prístup file://
, potom je samozrejme potrebné aktualizovať iba vášho klienta.
V tejto časti a takmer všade v tejto knihe slová “zámok” a “zamykanie” opisujú mechanizmus vzájomného vylúčenia medzi používateľmi, aby sa zabránilo kolíziám odovzdaní. Bohužiaľ, existujú ďalšie dva druhy “zámku” s ktorými sa Subversion a teda aj táto kniha, niekedy potrebuje zaoberať.
Druhým je príkaz zamknúť pracovnú kópiu
, interne používaný programom Subversion na zabránenie kolízie medzi viacerými klientmi Subversion pracujúcimi na rovnakej pracovnej kópii. Tieto zámky sa zvyčajne zobrazia vždy, keď dôjde k prerušeniu z dôvodu chyby príkazu ako obnoviť/odovzdať/... Tieto zámky je možné odstrániť spustením príkazu vyčistenia pracovnej kópie, ako je opísané v časti “Vyčistiť” .
Tretím je, že sa súbory a priečinky sa môžu uzamknúť, ak ich používa iný proces, napríklad ak máte v programe Word otvorený dokument vo formáte Word, tento súbor je uzamknutý a TortoiseSVN k nim nemá prístup.
Všeobecne môžete na tieto ďalšie druhy zámkov zabudnúť, kým sa neudeje niečo, čo si vyžaduje, aby ste sa o ne postarali. V tejto knihe “zámok” znamená prvý druh, pokiaľ to nie je inak zrejmé z kontextu alebo to nie je výslovne uvedené.
V predvolenom nastavení nie je nič zamknuté a ktokoľvek, kto má prístup na odovzdanie, môže kedykoľvek vykonať zmeny v ľubovoľnom súbore. Ostatní budú pravidelne aktualizovať svoje pracovné kópie a zmeny v úložisku sa zlúčia s miestnymi zmenami.
Ak Získate zámok súboru, potom ho môžete odovzdať iba vy. Odovzdania všetkých ostatných používateľov budú blokované, kým zámok neuvoľníte. Zamknutý súbor nemožno v úložisku nijako upravovať, takže ho nemožno vymazať ani premenovať, okrem vlastníka zámku.
Zámok nie je priradený konkrétnemu užívateľovi, ale konkrétnemu užívateľovi a pracovnej kópii. Uzamknutie v jednej pracovnej kópii tiež zabráni tomu istému užívateľovi odovzdanie uzamknutého súboru z inej pracovnej kópie.
Ako príklad si predstavte, že používateľ Jon má na svojom PC pracovnú kópiu. Tam začne pracovať na obrázku a preto získa zámok daného súboru. Keď odchádza zo svojej kancelárie, ešte s tým súborom neskončil, takže ten zámok neuvoľní. Doma má Jon tiež pracovnú kópiu a rozhodne sa na projekte trochu viac popracovať. Ten istý obrazový súbor však nemôže upraviť ani odovzdať, pretože zámok pre tento súbor sa nachádza v jeho pracovnej kópii v kancelárii.
Ostatní používatelia však nemusia nevyhnutne vedieť, že ste obsadili zámok. Pokiaľ stav zámku pravidelne nekontrolujú, najskôr sa o tom dozvedia, keď zlyhá ich odovzdanie, čo nie je vo väčšine prípadov veľmi vhodné. Na uľahčenie správy zámkov existuje nová vlastnosť Subversion svn:needs-lock
. Keď je táto vlastnosť nastavená (na ľubovoľnú hodnotu) v súbore, pri každej rezervácii alebo aktualizácii súboru sa z miestnej kópie vytvorí iba na čítanie pokiaľ pracovná kópia obsahuje zámok súboru. Toto slúži ako varovanie, že by ste tento súbor nemali upravovať, pokiaľ ste predtým nezískali zámok. Súbory sú verziové a iba na čítanie sú v TortoiseSVN označené špeciálnym prekrytím, čo naznačuje, že pred úpravou musíte získať zámok.
Zámky sa zaznamenávajú podľa umiestnenia pracovnej kópie aj podľa vlastníka. Ak máte niekoľko pracovných kópií (doma, v práci), môžete zabrať iba jeden zámok týchto pracovných kópií.
Ak niekto z vašich spolupracovníkov získa zámok a potom odíde na dovolenku bez toho, aby ho uvoľnil, čo urobíte? Subversion poskytuje prostriedky na vynútenie uzamknutia. Uvoľnenie zámku, ktorý drží niekto iný, sa označuje ako prelomenie zámku a násilné získanie zámku, ktorý už drží niekto iný, sa označuje ako ukradnutie zámku. Prirodzene to nie sú veci, ktoré by ste mali robiť ľahkovážne, ak chcete zostať priateľmi so svojimi spolupracovníkmi.
Zámky sa zaznamenávajú v úložisku a vo vašej miestnej pracovnej kópii sa vytvorí značka zámku. Ak dôjde k nezrovnalosti, napríklad ak niekto iný prelomil zámok, značka miestneho zámku sa stane neplatnou. Úložisko je vždy definitívnym odkazom.
Vyberte súbory vo svojej pracovnej kópii, pre ktoré chcete získať zámok, a potom vyberte príkaz
→ .
Zobrazí sa dialógové okno, ktoré vám umožní zadať komentár, aby ostatní videli, prečo ste súbor uzamkli. Komentár je voliteľný a v súčasnosti sa používa iba s archívmi založenými na Svnserve. Ak (a len ak) potrebujete ukradnúť zámok niekomu inému, zaškrtnite Ukradnúť zámok a potom kliknite na .
Môžete nastaviť vlastnosť projektu tsvn:logtemplatelock
tak, aby poskytovala užívateľom šablóny správy na vyplnenie ako uzamknutú správu. Pokyny na nastavenie vlastností sú časti “Nastavenia Projektu”.
Ak vyberiete priečinok a potom použijete každý súbor v každom podpriečinku vybraného na uzamknutie. Ak chcete skutočne uzamknúť celú hierarchiu, je to spôsob, ako to urobiť, ale mohli by ste sa stať veľmi nepopulárnymi u vašich spolupracovníkov, ak by ste ich vylúčili z celého projektu. Používajte to opatrne...
→ dialógové okno uzamknutia otvoríAby ste nezabudli uvoľniť zámok, ktorý už nepotrebujete, uzamknuté súbory sa zobrazia v dialógovom okne odovzdania a predvolene sa vyberú. Ak budete pokračovať v odovzdávaní, zámky, ktoré máte na vybratých súboroch, sa odstránia, aj keď súbory neboli upravené. Ak nechcete uvoľniť zámok pre určité súbory, môžete ich zaškrtnutie zrušiť (ak nie sú upravené). Ak si chcete ponechať zámok nad súborom, ktorý ste upravili, musíte povoliť zaškrtávacie políčko Uchovať zámky pred vykonaním zmien.
Ak chcete zámok uvoľniť manuálne, vyberte v pracovnej kópii súbory, pre ktoré chcete zámok uvoľniť, a potom vyberte príkaz
→ . Nie je už čo zadávať, takže TortoiseSVN kontaktuje úložisko a uvoľní zámky. Tento príkaz môžete tiež použiť v priečinku na rekurzívne uvoľnenie všetkých zámkov.
Pre pozretie zabratia zámku vami alebo inými, môžete použiť → . Lokálne držané značky zámku sa zobrazia okamžite. Ak chcete skontrolovať zámky, ktoré držia iní (a zistiť, či nie sú niektoré z vašich zámkov prelomené alebo ukradnuté), musíte kliknúť na .
Z kontextovej ponuky môžete tiež získať a uvoľniť zámky, ako aj prelomiť a ukradnúť zámky držané inými.
Ak prelomíte alebo ukradnete zámok niekoho iného bez toho, aby ste to nepovedali, môžete potenciálne spôsobiť stratu práce. Ak pracujete s nezlúčiteľnými typmi súborov a ukradnete zámok niekoho iného, po uvoľnení zámku bude môcť skontrolovať svoje zmeny a prepísať tie vaše. Subversion nestráca údaje, ale stratíte tímovú ochranu, ktorú vám poskytlo uzamknutie.
Ako už bolo spomenuté vyššie, najefektívnejším spôsobom použitia zamknutia je nastavenie vlastnosti svn:needs-lock
na súboroch. Pokyny na nastavenie vlastností sú v časti “Nastavenia Projektu”. Súbory s týmto nastavením vlastnosti budú vždy kontrolované a aktualizované so nastavením príznaku iba na čítanie, pokiaľ vaša pracovná kópia neobsahuje zámok.
Pripomíname, že TortoiseSVN to označuje špeciálnym prekrytím.
Ak uplatňujete politiku, pri ktorej musí byť každý súbor uzamknutý, môže byť jednoduchšie použiť funkciu automatických rekvizít Subversion na automatické nastavenie vlastnosti vždy, keď pridáte nové súbory. Pre ďalšie informácie si prečítajte časť “Automatické nastavenie vlastnosti”.
Keď vytvoríte nové úložisko so Subversion 1.2 alebo vyšším, v priečinku úložiska hooks
sa vytvoria štyri šablóny háku. Nazývajú sa pred a po získaní zámku a pred a po uvoľnení zámku.
Je dobrý nápad nainštalovať skripty háku pred zamknutím
a po odomknutí
na serveri, ktorý odošle e-mail s oznámením o zamknutom súbore. Po zavedení takého skriptu môžu byť všetci vaši používatelia upozornení, ak niekto uzamkne/odomkne súbor. Nájdete ukážkový skript háku v priečinku hooks/post-lock.tmpl
vo vašom úložisku.
Môžete tiež použiť háky na zakázanie prelomenia alebo ukradnutie zámkov, alebo ich môžete obmedziť na menovaného správcu. Prípadne môžete vlastníkovi poslať e-mail, keď je jeden z jeho zámkov prelomený alebo ukradnutý.
Ak sa chcete dozvedieť viac prečítajte si časť “Skripty háku na strane servera”.