Manuals

Blokowanie

Subversion na ogół działa najlepiej bez blokowania, przy użyciu metody kopia-modyfikacja-scalanie opisanej wcześniej w „Rozwiązanie kopia-modyfikacja-scalanie”. Jest jednak kilka przypadków, kiedy może zaistnieć potrzeba wykonania niektórych postaci polityki blokad.

Po pierwsze należy się upewnić, że serwer Subversion został uaktualniony do wersji co najmniej 1.2. Wcześniejsze wersje nie obsługują w ogóle blokady. Jeśli używacie dostępu file://, to oczywiście tylko klient musi zostać zaktualizowany.

Trzy Znaczenia Blokady

W tej sekcji, jak również prawie wszędzie w tej książce, słowa blokada i blokowanie opisuje mechanizm wzajemnego wykluczania użytkowników by uniknąć niszczących się wzajemnie zatwierdzeń. Niestety występują dwa inne rodzaje blokad, którymi Subversion, a przez to i ta książka, musi czasem się zająć.

Drugim są blokady kopii roboczej, używane wewnętrznie przez Subversion do zapobiegania starciom pomiędzy wieloma klientami Subversion działającymi na tej samej kopii roboczej Często blokady takie powstają gdy polecenie jak update/commit/... zostanide przerwane błędem. Blokady te mogą być usunięte przez uruchomienie polecenia porządkowania kopii roboczej, co opisano w „Uporządkuj”.

I trzeci, pliki i foldery zostają zablokowane gdy korzysta z nich inny proces, na przykład gdy macie dokument otwarty właśnie w Wordzie, zostaje on zablokowany i nie można uzyskać do niego dostępu z TortoiseSVN.

Można z reguły zapomnieć o tych innych blokadach, dopóki coś się nie wyłoży i nie trzeba się będzie tym zająć. W tej książce blokada odnosi się do pierwszego znaczenia, chyba że wynika toz kontekstu lub jest bezpośrednio powiedziane.

Jak działa blokowanie w Subversion

Domyślnie nic nie jest zablokowane i każdy, kto ma dostęp do zatwierdzeń może dokonać zmian w dowolnym pliku w dowolnym momencie. Inni będą aktualizować swoje kopie robocze okresowo i zmiany w repozytorium zostaną scalone ze zmianami lokalnymi.

Jeśli Uzyskasz blokadę na pliku, to tylko Wy będziecie mogli wykonywać zatwierdzenia tego pliku. Zatwierdzenia wszystkich innych użytkowników będą blokowane do momentu zwolnienia blokady. Zablokowany plik nie może być modyfikowany w jakikolwiek sposób w repozytorium, więc nie można go usunąć ani zmienić jego nazwy, chyba że uczyni to właściciel blokady.

Ważne

Blokada jest przypisana nie do konkretnego użytkownika, ale do konkretnego użytkownika i kopii roboczej. Blokada na jednej kopii roboczej uniemożliwia również temu samemu użytkownikowi zatwierdzenie zablokowanego pliku z innej kopii roboczej.

Na przykład, wyobraźcie sobie, że użytkownik Jan ma kopię roboczą na swoim komputerze biurowym. Tam rozpoczyna pracę na obrazie, a zatem uzyskuje blokadę na tym pliku. Gdy opuszcza swoje biuro, jeszcze nie zakończył pracy z tym plikiem, więc nie zwalnia blokady na nim. Po powrocie do domu Jan tam także ma kopię roboczą i decyduje się popracować trochę nad projektem. Ale nie można zmienić ani zatwierdzić tego pliku obrazu, ponieważ blokada tego pliku znajduje się na jego kopii roboczej w biurze.

Jednak inni użytkownicy nie muszą wiedzieć, że nałożyliście blokadę. O ile nie ​​sprawdzają stanu blokad regularnie, pierwszym razem, gdy się o takiej dowiedzą, będzie brak możliwości zatwierdzenia, co w większości przypadków nie jest zbyt przydatne. Aby ułatwić zarządzanie blokadami, wprowadzono nowy atrybut Subversion svn:needs-lock. Gdy ten atrybut jest ustawiony (na jakąkolwiek wartość) na pliku, gdy plik jest pobierany lub aktualizowany, lokalna kopia ma ustawianą właściwość tylko do odczytu chyba, że kopia robocza utrzymuje blokadę na pliku. Mechanizm ten działa jako ostrzeżenie, że nie należy zmieniać tego pliku o ile wcześniej nie ustawiło się blokady. Pliki wersjonowane i tylko do odczytu są oznaczone specjalną nakładką w TortoiseSVN, aby wskazać, że trzeba uzyskać blokadę przed ich edycją.

Blokady są zapamiętywane dla konkretnej lokalizacji kopii roboczej tak samo jak właściciela. Jeśli macie kilka kopii roboczych (w domu, w pracy), to można posiadać blokadę tylko w jednej z tych kopii roboczych.

Jeśli jeden z Waszych współpracowników nakłada blokadę i potem idzie na urlop, nie zwalniając jej, co można zrobić? Subversion zapewnia środki do wyłamywania blokad. Zwolnienie blokady przez kogoś innego nazywane jest dalej Łamaniem blokady, zaś nałożenie siłą własnej blokady, którą trzyma już ktoś inny jest określany jako Przejęcie blokady. Oczywiście nie są to rzeczy, które należy robić delikatnie, jeśli chce się pozostać w przyjaźni ze współpracownikami.

Blokady są rejestrowane w repozytorium, zaś token blokady jest tworzony w lokalnej kopii roboczej. Jeśli istnieje rozbieżność, na przykład, jeśli ktoś złamał blokadę, lokalny token blokady staje się nieważny. Repozytorium jest zawsze ostatecznym odniesieniem.

Ustawianie blokady

Wybierzcie w kopii roboczej plik(i), dla którego chcecie uzyskać blokadę, a następnie wybierzcie polecenie TortoiseSVNZablokuj....

Rysunek 4.61. Okno dialogowe blokady

Okno dialogowe blokady


Pojawi się okno dialogowe, pozwalające na wprowadzenie komentarza, tak aby inni mogli zrozumieć, dlaczego zablokowaliście plik. Komentarz jest opcjonalny i obecnie używany tylko w repozytoriach opartych na svnserve. Jeśli (i tylko, jeśli) musicie przejąć blokadę od kogoś innego, zaznaczcie pole Przejmij blokadę, a następnie kliknijcie OK.

Można ustawić atrybut projektu tsvn:logtemplatelock, aby zapewnić szablon opisu zmian dla użytkowników wypełnić go jako komunikat blokady. Zapoznajcie się z „Ustawienia projektu” by uzyskać instrukcje dotyczące ustawiania atrybutów.

Jeśli wybierzecie folder, a następnie użyjecie TortoiseSVNZablokuj… okno blokady otworzy się dla każdego pliku w każdym podkatalogu wybranym do zablokowania. Jeśli naprawdę chcecie zablokować całą hierarchię, w ten sposób to zrobicie, ale można stać się bardzo niepopularnym wśród swoich współpracowników, jeśli zablokujecie im cały projekt. Używajcie z rozwagą ...

Zwalnianie blokady

Aby upewnić się, że nie zapomnicie zwolnić zbędnej blokady, zablokowane pliki są wyświetlane w oknie dialogowym zatwierdzeń jako domyślnie zaznaczone. Jeśli zatwierdzenie zostanie wykonane, blokady trzymane na wybranych plikach zostaną usunięte, nawet jeśli pliki nie zostały zmodyfikowane. Jeśli nie chcecie, aby zwolnić blokadę na pewne pliki, możecie odznaczyć je (jeśli nie są one modyfikowane). Jeśli chcecie zachować blokadę na pliku, który został zmodyfikowany, musicie zaznaczyć pole wyboru Trzymaj blokady przed zatwierdzeniem zmian.

Aby zwolnić blokadę ręcznie, wybierzcie plik(i) w kopii roboczej, dla którego chcecie, aby zwolnić blokadę, a następnie wybierzcie polecenie TortoiseSVNZwolnij blokadę... Nie trzeba nic więcej wprowadzać zanim TortoiseSVN połączy się z repozytorium i zwolni blokadę. Możecie również użyć tego polecenia na folderze, aby zwolnić wszystkie blokady rekurencyjnie.

Sprawdzenie stanu blokady

Rysunek 4.62. Okno dialogowe Sprawdź zmiany

Okno dialogowe Sprawdź zmiany


Aby zobaczyć blokady trzymane przez Was i innych, można użyć TortoiseSVNSprawdź zmiany…. Lokalnie przechowywane tokeny blokady pokazują się natychmiast. Aby sprawdzić blokadę utrzymywaną przez innych (i zobaczyć czy któraś z waszych blokad jest złamana lub przejęta), trzeba kliknąć na Sprawdź repozytorium.

Z menu kontekstowego tutaj można również uzyskać i zwolnić blokadę, a także złamanie i przejąć blokady utrzymywane przez innych.

Unikanie łamania i przejmowania blokad

W przypadku złamania lub przejęcia cudzej blokady bez powiadomienia właściciela, można potencjalnie spowodować utratę czyjejś pracy. Jeśli pracujecie na niescalalnych typach plików i przejmujecie cudze blokady, po zwolnieniu blokady mogą oni swobodnie zatwierdzić własne zmiany i nadpisać Wasze. Subversion nie traci danych, ale Wy tracicie ochronę pracy zespołowej, którą daje blokada.

Oznaczanie nieblokowanych plików jako tylko do odczytu

Jak wspomniano powyżej, najbardziej efektywnym sposobem na używania blokad jest ustawianie atrybutu svn:needs-lock na plikach. Zapoznajcie się z „Ustawienia projektu” by uzyskać instrukcje dotyczące ustawiania atrybutów. Pliki z tym atrybutem zawsze będą pobierane i uaktualniane z właściwością tylko do odczytu, chyba, że kopia robocza trzyma blokadę.

Przypominamy, TortoiseSVN używa w tym celu specjalnej nakładki na ikonę.

Jeśli prowadzicie polityki, w których każdy plik musi być zablokowany, może się okazać, że łatwiej używać funkcji auto-props Subversion, by ustawić atrybut automatycznie przy każdym dodaniu nowych plików. Czytajcie „Automatyczne ustawienie atrybutu” dla uzyskania dalszych informacji.

Skrypty przechwytujące blokowania

Po utworzeniu nowego repozytorium przez Subversion 1.2 lub nowsze, cztery szablony przechwyceń są tworzone w folderze hooks repozytorium. Nazwane są od czasu wykonania: przed i po uzyskaniu blokady (before lock, after lock) oraz przed i po zwolnieniu blokady (before unlock, after unlock).

Jest to dobry pomysł, aby zainstalować na serwerze skrypty przechwytujące post-lock i post-unlock, wysyłające e-mail wskazujący plik, który został zablokowany. Przy pomocy działania takiego skryptu, wszyscy użytkownicy zostaną powiadomieni, jeśli ktoś zablokuje/odblokowuje plik. Możeszcie znaleźć przykład skryptu przechwytującego hooks/post-lock.tmpl w folderze repozytorium.

Możecie również użyć przechwyceń, aby uniemożliwić złamanie lub przejęcie blokad, czy może ograniczyć je do mianowanych administratorów. A może chcecie wysłać email do właściciela, kiedy jedna z ich blokad zostanie złamana lub przechwycona.

Czytajcie „Skrypty przechwytujące po stronie serwera” by dowiedzieć się więcej.

TortoiseSVN homepage