Blokkeren

Subversion werkt het beste als er geen gebruik wordt gemaakt van blokkeren, als je gebruik maakt van de Kopieer-Wijzig-Samenvoeg methode die eerder beschreven is in de paragraaf met de naam “De Kopieer-Wijzig-Samenvoeg Oplossing”. Er zijn echter enkele gevallen waarbij je een zekere vorm van blokkeerbeleid moet gebruiken.

Allereerst moet je er zeker van zijn dat je Subversion server is bijgewerkt tot minimaal versie 1.2. Eerdere versies ondersteunen blokkeren helemaal niet. Als je gebruik maakt van file://, hoef natuurlijk alleen maar je eigen programma bij te werken.

The Three Meanings of Lock

In this section, and almost everywhere in this book, the words lock and locking describe a mechanism for mutual exclusion between users to avoid clashing commits. Unfortunately, there are two other sorts of lock with which Subversion, and therefore this book, sometimes needs to be concerned.

The second is working copy locks, used internally by Subversion to prevent clashes between multiple Subversion clients operating on the same working copy. Usually you get these locks whenever a command like update/commit/... is interrupted due to an error. These locks can be removed by running the cleanup command on the working copy, as described in de paragraaf met de naam “Schonen”.

And third, files and folders can get locked if they're in use by another process, for example if you have a word document opened in Word, that file is locked and can not be accessed by TortoiseSVN.

You can generally forget about these other kinds of locks until something goes wrong that requires you to care about them. In this book, lock means the first sort unless the contrary is either clear from context or explicitly stated.

Hoe Het Blokkeren Werkt In Subversion

Standaard wordt er niets geblokkeerd en kan iedereen die de rechten heeft wijzigingen op elk moment vastleggen in het archief. Anderen zullen hun werkkopieën regelmatig moeten verversen en de wijzigingen in het archief worden dan samengevoegd met de lokale wijzigingen.

Als je een bestand blokkeert, dan heb jij alleenrecht op het vastleggen van dat bestand. Vastleggingen van andere gebruikers zullen geblokkeerd worden totdat jij de blokkade opheft. Een geblokkeerd bestand kan op geen enkele manier in het archief gewijzigd worden, dat houdt ook in dat niemand anders dan de eigenaar van de blokkade het bestand kan verwijderen of hernoemen.

Belangrijk

A lock is not assigned to a specific user, but to a specific user and a working copy. Having a lock in one working copy also prevents the same user from committing the locked file from another working copy.

As an example, imagine that user Jon has a working copy on his office PC. There he starts working on an image, and therefore acquires a lock on that file. When he leaves his office he's not finished yet with that file, so he doesn't release that lock. Back at home Jon also has a working copy and decides to work a little more on the project. But he can't modify or commit that same image file, because the lock for that file resides in his working copy in the office.

Andere gebruikers zullen echter niet direct weten dat jij een bestand geblokkeerd hebt, tenzij ze regelmatig de blokkade status opvragen. Het eerste moment waarop ze er meestal pas achter komen is als ze wijzigingen proberen vast te leggen, wat niet altijd handig is. Om het werken met blokkades te vereenvoudigen is er een nieuwe Subversion eigenschap geïntroduceerd, svn:needs-lock. Als deze eigenschap (met een willekeurige waarde) aan een bestand is gekoppeld, dan wordt het lokale bestand altijd als alleen-lezen gemarkeerd als deze opgehaald wordt uit het archief, tenzij/totdat die werkkopie het bestand blokkeert. Op deze manier wordt je gewaarschuwd dat je dit bestand niet moet wijzigen voordat je het geblokkeerd hebt. Bestanden, die voorzien zijn van versiebeheer en als alleen-lezen zijn gemarkeerd, hebben in TortoiseSVN een apart overlappend pictogram waarmee aangegeven wordt dat je eerst het bestand moet blokkeren.

Blokkades worden geadministreerd met de werkkopie locatie en de eigenaar. Als je meerdere werkkopieën hebt (thuis, op het werk), dan kun je in maar één werkkopie zo'n blokkade initiëren.

Stel dat één van je medewerkers zo'n blokkade instelt en vervolgens op vakantie gaat, wat doe je dan? Subversion heeft de mogelijkheid om blokkades te forceren. Het vrijgeven van een blokkade die door iemand anders is ingesteld wordt aangeduid als het Verbreken van een blokkade. Het geforceerd toe-eigenen van een blokkade die door iemand anders is ingesteld, wordt het Stelen van een blokkade genoemd. Hier moet je natuurlijk voorzichtig mee omgaan als je vrienden wilt blijven met je collega's.

Blokkades worden geadministreerd in het archief en er wordt ook een merkteken (een zogenaamde token) in je lokale werkkopie geplaatst. Als er een discrepantie is opgetreden, bijvoorbeeld als iemand anders de blokkade geforceerd heeft, dan zal het lokale blokkade merkteken ongeldig worden. De status in het archief is altijd leidend.

Blokkade verkrijgen

Selecteer de bestanden in je werkkopie die je wilt blokkeren. Vervolgens selecteer je het commando TortoiseSVNPlaats blokkade....

Afbeelding 4.60. Het blokkeringsscherm

Het blokkeringsscherm


Een apart venster verschijnt, waarin je aan anderen kunt aangeven waarom je de bestanden geblokkeerd hebt. Het invullen is optioneel en wordt op dit moment alleen gebruikt in archieven die op basis van Svnserve opgezet zijn. Alleen als je echt een blokkade moet stelen van iemand anders, moet je de Steel de blokkades selectie aanvinken om de blokkade te stelen. Klik vervolgens op OK om de actie in gang te zetten.

You can set the project property tsvn:logtemplatelock to provide a message template for users to fill in as the lock message. Refer to de paragraaf met de naam “Project Instellingen” for instructions on how to set properties.

Als je een map selecteert en vervolgens het commando TortoiseSVNPlaats blokkade... kiest, zal het blokkeringsscherm geopend worden voor elk bestand in de map en alle bestanden in de sub-mappen. Als je echt de hele hiërarchie wilt blokkeren, dan is dat de methode. Je collega's zullen er mogelijk niet blij van worden als je hun helemaal buiten het project sluit. Gebruik dit dus met verstand...

Een Blokkade Vrijgeven

Om te voorkomen dat je vergeet een blokkade vrij te geven, worden geblokkeerde bestanden weergegeven in het vastleggen venster en standaard geselecteerd. Als je dan doorgaat met het vastleggen, zullen blokkades van de geselecteerde bestanden verwijderd worden, zelfs als er niets gewijzigd is. Als je de blokkade op bepaalde bestanden niet wilt vrijgeven, dan kun je deze de-selecteren (als ze niet gewijzigd zijn). Als je de blokkade op gewijzigde bestanden wilt behouden, dan moet je het Blokkades handhaven selectievak aanvinken voordat je je wijzigingen vastlegt.

Als je een blokkade handmatig wilt opheffen, moet je de bestanden in je werkkopie selecteren waarvoor je de blokkade wilt opheffen. Vervolgens kies je het commando TortoiseSVNBlokkade opheffen. Er hoeft verder geen informatie ingevoerd te worden, dus TortoiseSVN zal het archief benaderen en de blokkades opheffen. Je kunt dit commando ook op mappen toepassen om alle blokkades recursief op te heffen.

Blokkadestatus Controleren

Afbeelding 4.61. Het Kijk of er updates zijn scherm

Het Kijk of er updates zijn scherm


Om na te gaan welke blokkades er door jou of anderen geplaatst zijn, kun je gebruik maken van TortoiseSVNKijk of er updates zijn.... Lokale blokkade merktekens worden meteen getoond. Om de blokkades van anderen te zien (en om na te gaan of jouw blokkades verbroken of gestolen zijn) moet je op Controleer archief klikken.

Via het context menu, kun je hier ook blokkades plaatsen en opheffen, maar ook blokkades van anderen verbreken en stelen.

Voorkom het verbreken en stelen van blokkades

Het verbreken of stelen van iemand anders blokkade zonder dat die persoon daarvan op de hoogte is, kan verlies van gegevens tot gevolg hebben. Als je iemand zijn blokkade steelt en werkt met niet samenvoegbare bestandsformaten, dan kan iemand anders jouw wijzigingen overschrijven op het moment dat jij jouw blokkade opheft en zij hun wijzigingen vastleggen in het archief. Subversion raakt geen informatie kwijt, maar je verliest wel de beveiliging de blokkade functionaliteit je biedt bij het werken in teamverband.

Niet-geblokkeerde bestanden als Alleen-lezen instellen

Zoals eerder beschreven, kun je blokkades het effectiefst gebruiken door gebruik te maken van de svn:needs-lock eigenschap. Lees de paragraaf met de naam “Project Instellingen” voor meer informatie over het instellen van eigenschappen. Bestanden die deze eigenschap hebben, krijgen meteen de alleen-lezen eigenschap mee als ze worden opgehaald uit het archief, tenzij jouw werkkopie het bestand geblokkeerd heeft.

Ter herinnering, TortoiseSVN gebruikt een apart overlappend pictogram om deze situatie aan te geven.

Als je een beleid hanteert waardoor elk bestand geblokkeerd moet worden, dan is het waarschijnlijk makkelijker om automatische-eigenschappen functie van Subversion te gebruiken. Hiermee wordt automatisch dezelfde eigenschap ingesteld als je een nieuwe bestand toevoegt. Lees ook de paragraaf met de naam “Automatisch eigenschappen zetten” voor meer informatie.

Hook Scripts Voor Blokkeringen

Als je een nieuw archief aanmaakt met Subversion 1.2 of hoger, worden er vier hook sjablonen aangemaakt in de map hooks van het archief. Deze worden aangeroepen voor en na het plaatsen van een blokkade, en voor en na het opheffen van een blokkade.

Het is verstandig om op de server een na-het-blokkeren en na-het-deblokkeren hook script te installeren, waardoor een email verstuurd wordt waarin aangegeven wordt welk bestand ge(de)blokkeerd is. Met zo'n script kunnen alle gebruikers geïnformeerd worden over het feit dat er een blokkade geplaatst of opgeheven wordt. Je kunt een voorbeeld hooks/post-lock.tmpl vinden in je archief.

Je kunt ook hook scripts gebruiken om het verbreken of stelen van blokkades te voorkomen, of dat alleen een beheerder dit mag doen. Je kunt ook een email laten sturen naar de eigenaar van een blokkade als zijn blokkade verbroken of gestolen wordt.

Lees de paragraaf met de naam “Server gesitueerde hook scripts” voor meer informatie hierover.