Die Möglichkeit ein pessimistisches Locking einzuführen, wird als eines der wesentlichen neuen Leistungsmerkmal von Subversion 1.2 gesehen - das Subversion insbesondere von CVS abgrenzt.
Aber wie aktiviert man dieses Locking in Subversion?Es gibt z.B. drei Möglichkeiten diese Locking zu verwenden:
1. Locking manuell für genau eine Datei setzen
2. Locking manuell für alle momentan im Repository vorhandenen Dateien setzen
3. Loching als Standradverhalten für das gesamte Repository aktivieren
Zu 1.)
Es gibt zum einen die Möglichkeit, einzelne Dateien (z.B. Binärdateien für die der standardmäßige Merge-Ansatz nicht funktioniert) mit dem Lock zu versehen. Dann ist die Eigenschaft svn:needs-lock zu setzen.
Zu 2.)
Alternativ kann man auch allen Dateien eines Repository's diese Eigenschaf zuweisen. Das beispielsweise so (wenn Subversion über svn:// erreicht werden kann.):
D:\bsp_projekt>svn co url://localhost/TestRepository ein_unterverzeichnis
svn: Unbekanntes URL Schema für 'url://localhost/TestRepository'
D:\bsp_projekt>svn co svn://localhost/TestRepository ein_unterverzeichnis
A ein_unterverzeichnis\Testbild.jpg
A ein_unterverzeichnis\Word-Dokument.doc
A ein_unterverzeichnis\Textdokument.txt
A ein_unterverzeichnis\Word-Dokument2.doc
Ausgecheckt, Revision 13.
D:\bsp_projekt>dir
Datenträger in Laufwerk D: ist DATEN
Datenträgernummer:
Verzeichnis von D:\bsp_projekt
17.08.05 23:24 <DIR> .
17.08.05 23:24 <DIR> ..
17.08.05 23:24 <DIR> ein_unterverzeichnis
3 Datei(en) 0 Bytes
12.476.518.400 Bytes frei
D:\bsp_projekt>cd ein_unterverzeichnis
D:\bsp_projekt\ein_unterverzeichnis>dir
Datenträger in Laufwerk D: ist DATEN
Datenträgernummer:
Verzeichnis von D:\bsp_projekt\ein_unterverzeichnis
17.08.05 23:24 <DIR> .
17.08.05 23:24 <DIR> ..
17.08.05 23:24 74.482 Testbild.jpg
17.08.05 23:24 380 Textdokument.txt
17.08.05 23:24 24.064 Word-Dokument.doc
17.08.05 23:24 24.064 Word-Dokument2.doc
6 Datei(en) 122.990 Bytes
12.476.518.400 Bytes frei
D:\bsp_projekt\ein_unterverzeichnis>cd..
D:\bsp_projekt>svn propset -R svn:needs-lock yes ein_unterverzeichnis
Eigenschaft 'svn:needs-lock' (rekursiv) für 'ein_unterverzeichnis' gesetzt
D:\bsp_projekt>svn ci ein_unterverzeichnis -m "Set needs:lock property to all files in repository."
Sende ein_unterverzeichnis\Testbild.jpg
Sende ein_unterverzeichnis\Textdokument.txt
Sende ein_unterverzeichnis\Word-Dokument.doc
Sende ein_unterverzeichnis\Word-Dokument2.doc
Revision 14 übertragen.
D:\bsp_projekt>Bei anderen Installationen z.B. per WebDAV mit http:// bzw. https:// oder über ein lokales Verzeichnis mit file:// muss auch die URL entsprechend geändert werden. Hat man das falsche URL-Schema verwendet, erhält man die Fehlermeldung: "svn: Unbekanntes URL Schema für 'url://localhost/TestRepository'".
zu 3.)
Damit nicht für jede neu zum Repository hinzugefügte Datei die Eigenschaft needs-lock manuell gesetzt werden muss, gibt eine dritte Möglichkeit. Es wird die Konfiguration von Subversion geändert, in dem die [auto-props]-Eingeschaft geändert wird.
Eine Variante dieser Möglichkeit besteht darin, die Datei "config", die unter den Anwendungsdaten des Benutzerprofils abegelet ist anzupassen. Unter Windows NT finden Sie diese Datei (für einen Benutzer mit dem Namen "mustermann" unter:
C:/WINNT/Profiles/mustermann/Anwendungsdaten/Subversion/. Bei Windows 2000 und Windows XP an den entsprechenden Stellen.
In dieser Config-Datei muss im Abschnitt [miscellany] der bereits vorhandene, aber auskommentierte Eintrag
enable-auto-props = yes aktiviert werden, indem das Kommentarzeichen
# entfernt wird.
Zusätzlich muss in der Conifg-Datei im Abschnitt
[auto-props] ein neuer Eintrag einfügt werden, der so lautet:
* = svn:needs-lock=true. Der Stern
* ist Platzhalter und steht für alle Dateien. Wenn nur ein bestimmter Datei-Typ mit dem Locking versehen werdne soll, dann muss dies entsprechend angepasst werden (z.B. "*.doc").
Auszug aus einer Beispiel-Datei:
### This file configures various client-side behaviors.
###
### The commented-out examples below are intended to demonstrate
### how to use this file.
...
### Section for configuring miscelleneous Subversion options.
[miscellany]
### Set global-ignores to a set of whitespace-delimited globs
### which Subversion will ignore in its 'status' output.
# global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store
### Set log-encoding to the default encoding for log messages
# log-encoding = latin1
### Set use-commit-times to make checkout/update/switch/revert
### put last-committed timestamps on every file touched.
# use-commit-times = yes
### Set no-unlock to prevent 'svn commit' from automatically
### releasing locks on files.
# no-unlock = yes
### Set enable-auto-props to 'yes' to enable automatic properties
### for 'svn add' and 'svn import', it defaults to 'no'.
### Automatic properties are defined in the section 'auto-props'.
enable-auto-props = yes
### Section for configuring automatic properties.
[auto-props]
### The format of the entries is:
### file-name-pattern = propname[=value][;propname[=value]...]
### The file-name-pattern can contain wildcards (such as '*' and
### '?'). All entries which match will be applied to the file.
### Note that auto-props functionality must be enabled, which
### is typically done by setting the 'enable-auto-props' option.
* = svn:needs-lock=true
...
Weitere Varianten dieser Möglichkeiten (z.B. Anpassung der Windows-Registrierung anstelle der config-Datei) finden Sie im
SVN-Buch in Kapitel 7 (
hier http://svnbook.red-bean.com/nightly/en/svn.advanced.props.html).
und (
hier unter http://svnbook.red-bean.com/nightly/en/svn.advanced.html#svn.advanced.confarea.opts.config)
Empfehlenswert ist in jedem Fall auch ein Blick in die (deutsche Version der) TortoiseSVN-Dokumentation unter
http://tortoisesvn.sourceforge.net/docs/release/TortoiseSVN_de.pdf, S. 73 Abschnitt 5.18.5)