Sperren

Subversion funktioniert im Allgemeinen am besten ohne Sperren, da es den in „Die Kopieren-Ändern-Zusammenführen Lösung“ besprochenen Ansatz verfolgt. Es gibt jedoch einige Fälle, in denen es erforderlich ist, Dateien zu sperren.

Zunächst müssen Sie sicherstellen, dass Ihr Subversion Server zumindest mit Version 1.2 arbeitet. Frühere Versionen unterstützen Sperren überhaupt nicht. Wenn Sie ausschließlich den file:// Zugriff nutzen, müssen nur Ihre Clients aktualisiert werden.

Sperren von Dateien in Subversion

In der Grundeinstellung sind keine Objekte gesperrt und jeder, der die entsprechende Berechtigung hat, kann seine Änderungen in das Projektarchiv übertragen. Andere werden ihre Arbeitskopien regelmäßig aktualisieren und Änderungen im Projektarchiv werden mit den lokalen Änderungen zusammengeführt.

Wenn Sie für eine Datei Eine Sperre holen, können nur Sie Änderungen an dieser Datei übertragen. Übertragungen von anderen werden so lange verhindert, bis Sie die Sperre wieder freigeben. Eine gesperrte Datei kann auf keine Weise im Projektarchiv verändert, umbenannt oder gelöscht werden. Dies ist nur dem Eigner der Sperre möglich.

Andere Anwender werden nicht unbedingt wissen, dass Sie eine Datei gesperrt haben. Wenn sie nicht regelmäßig den Sperrstatus überprüfen, werden sie es frühestens merken, wenn ihre Übertragung fehlschlägt, was in den meisten Fällen nicht sehr nützlich ist. Damit es einfacher ist, Sperren zu verwalten, gibt es die neue svn:needs-lock Eigenschaft von Subversion. Wenn diese Eigenschaft (auf einen beliebigen Wert) gesetzt ist, wird beim Auschecken oder Aktualisieren die Datei in der Arbeitskopie mit einem Schreibschutz versehen, es sei denn die Arbeitskopie besitzt die Sperre für die Datei. Dies dient als Warnung, dass Sie die Datei nicht bearbeiten sollen, bevor Sie nicht die Sperre für die Datei besitzen. Dateien unter Versionskontrolle, die mit Schreibschutz versehen sind, erhalten von TortoiseSVN ein überlagertes Symbol, das anzeigt, dass Sie erst eine Sperre holen müssen, bevor Sie die Datei bearbeiten.

Sperren gehören sowohl zu einer Arbeitskopie als auch zu einer Person. Wenn Sie mehrere Arbeitskopien desselben Projekts (bei der Arbeit, daheim) haben, können Sie eine Datei nur in einer dieser Arbeitskopien sperren.

Wenn einer Ihrer Kollegen eine Datei sperrt und in Urlaub geht, ohne die Sperre vorher freizugeben, was dann? Subversion bietet Ihnen eine Möglichkeit, Sperren auszuhebeln. Eine Sperre freizugeben, die jemand anders besitzt, wird auch Sperre aufbrechen genannt. Sich eine Sperre zu holen, die jemand anders besitzt, wird auch Sperre stehlen genannt. Selbstverständlich sollten Sie dies nicht leichtfertig tun, wenn Sie sich weiterhin mit Ihren Kollegen gut stellen wollen.

Sperren werden im Projektarchiv verwaltet und eine Sperrmarke wird zusätzlich in Ihrer Arbeitskopie angelegt. Wenn es einen Unterschied zwischen diesen Werte gibt, z.B. weil jemand eine Sperre aufgebrochen hat, wird die lokale Sperrmarke ungültig. Der Sperrstatus im Projektarchiv ist stets maßgeblich.

Eine Sperre erhalten

Markieren Sie die Datei(en) in Ihrer Arbeitskopie, für die Sie eine Sperre erhalten möchten und wählen Sie TortoiseSVNSperre holen....

Abbildung 5.40. Der Sperren-Dialog

Der Sperren-Dialog


Ein Dialog erscheint, in dem Sie einen Sperrkommentar eingeben können, damit andere wissen, warum Sie die Datei für sich reservieren. Der Kommentar ist optional und wird derzeit nur bei svnserve basierten Projektarchiven genutzt. Wenn (und nur wenn) sie eine Sperre von jemand anderem stehlen wollen, markieren Sie die Sperren stehlen Option bevor Sie auf OK klicken.

Wenn Sie einen Ordner markieren und TortoiseSVNSperre Holen... aufrufen, wird der Sperr-Dialog mit jeder Datei in jedem Unterordner, zum Sperren markiert, geöffnet. Wenn Sie wirklich eine ganze Ordnerstruktur sperren wollen, ist das der richtige Weg das zu erreichen. Sie können sich damit allerdings bei Ihren Kollegen sehr unbeliebt machen, wenn Sie diese aus dem gesamten Projekt aussperren...

Eine Sperre freigeben

Um sicherzustellen, dass Sie nicht vergessen, Sperren freizugeben, werden gesperrte Dateien im Übertragen-Dialog angezeigt und sind standardmäßig gewählt. Wenn Sie die Übertragung durchführen, werden die Sperren der markierten Dateien freigegeben, auch wenn die Dateien selbst sich nicht geändert haben. Wenn Sie die Dateisperren nicht freigeben wollen, können Sie die entsprechenden Dateien abwählen, vorausgesetzt, dass sie nicht modifiziert sind. Wenn Sie die Sperre für veränderte Dateien behalten wollen, müssen Sie vor der Übertragung die Sperren behalten Option markieren.

Um eine Sperre von Hand freizugeben, markieren Sie die gewünschten Datei(en) in Ihrer Arbeitskopie und wählen Sie TortoiseSVNSperre freigeben. TortoiseSVN wird das Projektarchiv kontaktieren und die Sperren dort freigeben. Sie können diesen Befehl auch für einen Ordner aufrufen, um alle Sperren rekursiv freizugeben.

Den Sperrstatus prüfen

Abbildung 5.41. Der Dialog „Prüfe auf Änderungen

Der Dialog Prüfe auf Änderungen


Um zu sehen, welche Sperren Sie oder andere Personen besitzen, können Sie TortoiseSVNPrüfe auf Änderungen... aufrufen. Lokale Sperren werden sofort angezeigt. Damit Sie sehen können, welche Sperren von anderen gehalten werden und um festzustellen, ob Ihre Sperren aufgebrochen oder gestohlen wurden, müssen Sie Projektarchiv prüfen wählen.

Aus dem Kontextmenü dieses Dialogs heraus können Sie Sperren holen oder freigeben und auch Sperren von anderen stehlen oder aufbrechen.

Vermeiden Sie es Sperren aufzubrechen oder zu stehlen

Wenn Sie die Sperre eines Kollegen stehlen oder aufbrechen, ohne ihm dies mitzuteilen, können Sie doppelte Arbeit verursachen. Falls Sie mit nicht zusammenführbaren Dateien arbeiten und eine Sperre stehlen, kann derjenige der die Sperre vorher besaß Ihre Daten überschreiben, sobald Sie die Sperre freigeben. Subversion verliert zwar keine Daten, aber Sie haben den gegenseitigen Schutz bei de Zusammenarbeit, den Sperren bieten, verloren.

Nicht gesperrte Dateien mit Schreibschutz versehen

Wie bereits erwähnt ist der einfachste Weg dazu, die svn:needs-lock Eigenschaft der Datei zu setzen. Lesen Sie „Projekt-Einstellungen“, um zu erfahren, wie man Eigenschaften setzt. Dateien mit dieser Eigenschaft werden beim Aktualisieren und Auschecken stets mit einem Schreibschutz versehen, wenn die Arbeitskopie keine Sperre für die Datei besitzt.

Als Erinnerung zeigt TortoiseSVN dieses Symbol dafür an.

Wenn Sie ein Entwicklungsverfahren nutzen, das stets Dateisperren erfordert, ist es einfacher Subversions auto-props Eigenschaft zu nutzen, um die Dateieigenschaften automatisch zu setzen, sobald Sie Dateien zum Projektarchiv hinzufügen. Lesen Sie „Eigenschaften automatisch setzen“ für weitere Information.

Aktionsskripte für Sperren

Wenn Sie ein neues Projektarchiv mit Subversion 1.2 anlegen, werden vier Schablonen für Aktionsskripte im hooks Verzeichnis des Projektarchivs angelegt. Diese Aktionsskripte werden aufgerufen, bevor und nachdem eine Sperre geholt, bzw. freigegeben wird.

Es ist eine gute Idee, ein post-lock und ein post-unlock Aktionsskript auf dem Server zu installieren, die eine Benachrichtigungs E-Mail verschicken. Mit solch einem Skript können alle betroffenen Personen darüber informiert werden, wenn eine Datei gesperrt wurde. Sie finden ein Beispiel hooks/post-lock.tmpl Skript in Ihrem Projektarchiv.

Vielleicht möchten Sie mit Aktionsskripten auch verhindern, dass jemand Sperren stiehlt oder aufbricht oder Sie möchten diese Möglichkeit auf Administratoren beschränken. Sie können mit einem Skript auch den Eigner der Sperre per E-Mail darüber informieren, wenn seine Sperre gestohlen wurde.

Lesen Sie „Aktionsskripte“ für weitere Informationen.