Zamykání

Subversion většinou funguje nejlépe bez zamykání, použitím metody Kopírovat-Změnit-Sloučit popsané v předchozí části „Řešení Kopírovat-Změnit-Sloučit“. Nicméně existuje několik případů, kdy může být nutné zavést nějakou formu zásady zamykání.

Nejprve je nutné se ujistit, že Váš Subversion server je aktualizován alespoň na verzi 1.2. Dřívější verze vůbec nepodporují zamykání. Pokud vstupujete přes protokol file://, pak samozřejmě pouze Váš klient musí být aktualizován.

Tři významy Zámku

V této části a skoro všude jinde v této knize popisují slova zámek a uzamčení mechanizmus pro vzájemné vyloučení mezi uživateli aby se předešlo střetu odevzdání. Bohužel existují další dva druhy zámku s kterým se Subversion, a tudíž i tato kniha, někdy musí zabývat.

Druhým je uzamčení pracovní kopie, což Subversion používá vnitřně pro zabránění konfliktů mezi mnoha klienty Subversion pracující na stejné pracovní kopii. Většinou na tyto zámky narazíte, když příkazy jako aktualizovat/odevzdat/... je přerušen kvůli chybě. Tyto zámky lze odstranit spuštěním příkazu vyčištění v pracovní kopii, tak jak je popsáno v „Vyčistit“.

A třetím je uzamčení souborů a složek, když jsou používány jiným procesem, například pokud máte dokument otevřen ve Wordu, tento soubor je uzamčen a TortoiseSVN k němu nemá přístup.

Většinou se těmito ostatními druhy uzamčení nemusíte zabývat, dokud se nestane něco, co by vyžadovalo vaší pozornost. V této knize zámek znamená první druh, pokud není řečeno jinak, či toto vyplývá z obsahu.

Jak Zamykání v Subversion Funguje

Ve výchozím nastavení nic není zamčené a každý, kdo má přístup k odevzdání může kdykoli odevzdat změny jakéhokoliv souboru. Ostatní budou pravidelně aktualizovat své pracovní kopie a změny v úložišti budou sloučeny s místními změnami.

Pokud Zamknete soubor, pak jenom Vy můžete tento soubor odevzdat. Odevzdání všech ostatních uživatelů bude blokováno, dokud Vy neuvolníte zámek. Zamknutý soubor nemůže být žádným způsobem v úložišti změněn, také nemůže být smazán nebo přejmenován nikým jiným, než majitelem zámku.

Důležité

Zámek není určen konkrétnímu uživatele, ale konkrétní uživateli a pracovní kopii. Mít zámek v jedné pracovní kopii také zabraňuje stejnému uživateli odevzdat uzamčený soubor z jiné pracovní kopie.

Jako příklad si představte, že uživatel Pavel má pracovní kopii na svém kancelářském PC. Tam začne pracovat na obrázku a proto získá zámek na tento soubor. Když odchází z kanceláře, ještě s tímto souborem neskončil, a proto zámek neuvolní. Doma má Pavel také pracovní kopii a rozhodne se na projektu pracovat trošku déle. Ale nemůže změnit nebo odevzdat stejný soubor s obrázkem, protože zámek pro tento soubor je umístěn v jeho pracovní kopii v kanceláři.

Nicméně, ostatní uživatelé nemusí vědět, že jste si vzali zámek. Pokud nebudou kontrolovat stav zámku pravidelně, budou poprvé vědět o zámku, když jejich odevzdání selže, což ve většině případů není příliš užitečné. Aby bylo snazší zámky spravovat, je zde nová vlastnost Subversion svn:needs-lock. Když je tato vlastnost nastavena (na jakoukoli hodnotu) na soubor, kdykoli je soubor získán, nebo aktualizován, je místní kopie pouze pro čtení pokud pracovní kopie nedrží zámek pro tento soubor. Toto se chová jako varování, že byste neměli upravovat soubor pokud jste nejdříve nezískali zámek. Soubory, které jsou s verzí a pouze pro čtení, jsou v TortoiseSVN označeny speciálním překryvem, který uvádí, že před úpravou potřebujete získat zámek.

Zámky jsou zaznamenávány v umístění pracovní kopie, stejně jako majitelem. Pokud máte několik pracovních kopií (doma, v práci), pak můžete mít pouze zámek v jedné z těchto pracovních kopií.

Pokud jeden z vašich spolupracovníků získá zámek a pak odjede na dovolenou, aniž by ho uvolnil, co uděláte? Subversion poskytuje prostředky k vyražení zámku. Uvolnění zámku v držení někoho jiného, je označováno jako Rozbití zámku a násilné získání zámku, který již někdo vlastní, je označován jako Ukradnutí zámku. Přirozeně to nejsou věci, které byste měli brát na lehkou váhu, chcete-li zůstat přáteli se svými spolupracovníky.

Zámky jsou zaznamenány v úložišti, a znak zámku je vytvořen ve Vaší místní pracovní kopii. Pokud existuje rozpor, například pokud někdo jiný rozbil zámek, znak místního zámku se stává neplatným. Úložiště je vždy rozhodný odkaz.

Získání zámku

Vyberte soubor(y) v pracovní kopii, pro které chcete získat zámek, pak vyberte příkaz TortoiseSVNUzamknout....

Obrázek 4.61. Dialogové okno Uzamknutí

Dialogové okno Uzamknutí


Zobrazí se dialogové okno, kde můžete zadat komentář, takže ostatní uvidí, proč jste zamkl soubor. Komentář je nepovinný a v současné době používán pouze se svnserve úložišťmi. Jestliže (a pouze jestliže), musíte ukrást zámek někoho jiného, zaškrtněte políčko Ukrást zámek a poté klikněte na OK.

Můžete nastavit vlastnost projektu tsvn:logtemplatelock k poskytnutí šablony zprávy pro uživatele k vyplnění jako zprávu uzamknutí. Viz „Nastavení projektu“ pro návod, jak nastavit vlastnosti.

Pokud vyberete adresář a potom použijete TortoiseSVNUzamknout... dialogové okno uzamknutí se otveře s každým souborem v každém podadresáři vybraným pro zamknutí. Pokud opravdu chcete zamknout celou hierarchie, toto je způsob, jak to udělat, ale mohly byste se stát velmi neoblíbenými u svých spolupracovníků, pokud je do celého projektu nepustíte. Používejte opatrně ...

Uvolnění zámku

Abyste se ujistili, že nezapomenete uvolnit zámek, který už nepotřebujete, jsou uzamčené soubory zobrazeny v dialogovém okně odevzdání a ve výchozím nastavení jsou vybrány. Pokud budete v odevzdání pokračovat, zámky, které držíte na vybraných souborech, jsou odstraněny i když soubory nebyly změněny. Pokud na některém souboru nechcete uvolnit zámek, můžete zrušit jejich zaškrtnutí (pokud nejsou upraveny). Pokud chcete zachovat zámek na souboru, který jste upravili, musíte zaškrtnout políčko Ponechat zámky před odevzdáním změn.

K ručnímu uvolnění zámku, vyberte soubor(y) v pracovní kopii, kterým chcete uvolnit zámek, pak vyberte příkaz TortoiseSVNUvolnit zámek Nic dalšího k zadání není a tak TortoiseSVN zkontaktuje úložiště a zámky uvolní. Můžete také použít tento příkaz na adresář, aby všechny zámky byly rekurzivně uvolněny.

Kontrola stavu zámku

Obrázek 4.62. Dialogové okno Zjistit Změny

Dialogové okno Zjistit Změny


Chcete-li vidět, jaké zámky Vy a ostatní držíte, můžete použít TortoiseSVNZjistit změny.... Místně držené znaky zámků se objeví okamžitě. Chcete-li zkontrolovat zámky držené ostatními (a zjistit, zda některý z Vašich zámků nebyl rozbit nebo ukraden), musíte kliknout na Zkontrolovat Úložiště.

Z kontextového menu tu můžete také získat a uvolnit zámky, stejně jako rozbít nebo ukrást zámky držené ostatními.

Vyhněte se Rozbíjení a Krádeži Zámků

Pokud rozbijete nebo ukradnete zámek někoho jiného, aniž byste jim to řekli, mohli byste potenciálně způsobit ztrátu práce. Pokud pracujete s neslučitelnými typy souborů a ukradnete zámek někoho jiného, jakmile zámek uvolníte, můžou odevzdat své změny a přepsat Vaše. Subversion neztratí data, ale Vy jste ztratili ochranu proti týmové práci, kterou Vám uzamknutí dalo.

Převést Neuzamčené Soubory na Pouze Pro Čtení

Jak bylo uvedeno výše, nejvíce efektivní způsob, jak používat zamykání je nastavit vlastnost svn:needs-lock na soubory. Viz „Nastavení projektu“ pro návod, jak nastavit vlastnosti. Soubory s touto vlastností budou vždy získávány a aktualizovány s nastaveným příznakem pouze pro čtení, pokud Vaše pracovní kopii nedrží zámek.

Pro připomenutí, TortoiseSVN používá speciální překryvy pro sdělení tohoto stavu.

Máte-li provozovat zásadu, kde každý soubor musí být uzamčen, pak můžete shledat snadnějším používat funkci auto-vlastnosti Subversion pro nastavení vlastností automaticky při každém přidání nových souborů. Přečtěte si „Automatické nastavení vlastnosti“ pro další informace.

Hákové Skripty Uzamknutí

Při vytváření nového úložiště se Subversion 1.2 nebo vyšší, jsou v úložišti vytvořeny čtyři šablony háků v adresáři hooks. Tyto skripty jsou volány před a po získání a před a po uvolnění zámku.

Je dobrý nápad instalovat na serveru hákový skript po-zamknutí a po-odemknutí, který pošle e-mail se jménem souboru, který byl uzamčen. S takovým skriptem na místě, můžou být všichni Vaši uživatelé oznámeni pokud někdo uzamkne/odemkne soubor. Můžete najít příklad hákového skriptu hooks/post-lock.tmpl v adresáři úložiště.

Můžete také použít háky k zakázání rozbití nebo kradení zámků, nebo třeba toto omezit na jmenovaného správce. Nebo možná budete chtít poslat e-mail majiteli, když je jeden z jejich zámků rozbit nebo ukraden.

Přečtěte si „Hákové skripty na straně serveru“ pro více informací.