Softwaretechnik-Blog

Freitag, August 19, 2005

 

Locking in Subversion 1.2 (svn:needs-lock)

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)

Comments: Kommentar veröffentlichen

<< Home

Archives

This page is powered by Blogger. Isn't yours?

Haftungsausschluss:
Alle Ausführungen und Inhalte auf dieser Website sind gewissenhaft erarbeitet worden. Dennoch kann weder die inhaltliche Richtigkeit, noch die Übereinstimmung mit den tatsächlichen Bedürfnissen des Nutzers der hier dargestellten Ausführungen und Inhalte garantiert werden. Der Nutzer der hier dargestellten Ausführungen und Inhalte verpflichtet sich, sie vor ihrer Verwendung inhaltlich auf Richtigkeit und auf Eignung für den konkreten Einsatzzweck zu prüfen. Es kann keine Gewährleistung für die rechtliche oder technische Wirksamkeit der Ausführungen und Inhalte übernommen werden - insbesondere können hieraus auch keine haftungsrelevanten Ansprüche hergeleitet werden.