Did you know that you can navigate the posts by swiping left and right?

Dateieigenschaften bei Subversion

14 Jul 2008 . Unknown . Comments

Die Versionsverwaltung Subversion hat eine interessante Funktion, auf die mich ein Kollege aufmerksam gemacht hat. Man kann einzelnen Dateien des Repositories bekanntlich verschiedene Eigenschaften zuweisen. Einige waren mir durchaus schon bekannt, wie der Mime-Type (svn:mime-type) oder eine Lock-Markierung (svn:needs-lock). Bisher nicht bekannt war mir die Eigenschaft svn:keywords bzw. dessen Anwendungszweck.

Für diese Eigenschaft gibt es verschiedene Werte die man setzen kann:

  • Date
  • Revision
  • Author
  • HeadURL
  • Id

Man kann auch mehrere dieser Werte kombinieren indem man sie mit einem Leerzeichen trennt. Was aber bringt einem das jetzt genau?

Nehmen wir an, wir hätten eine Codebehind-Datei mit folgendem Header:

/*******************************************************************
 *               Google Analytics ASP.NET Server Control
 *******************************************************************
 * 
 * $LastChangedDate$
 * $LastChangedRevision$
 * $LastChangedBy$
 * 
 *******************************************************************/

Ein solcher Kommentar hat den Vorteil, dass man auf Anhieb sieht wozu die betreffende Datei gehört, wann sie zuletzt verändert wurde und von wem. Es ist allerdings etwas mühsam, die Angaben zum Datum, der Dateirevision oder dem letzten Editor manuell immer auf dem aktuellen Stand zu halten. Und genau hier greift nun die Subversion-Eigenschaft svn:keywords.

Wird eine Datei aus dem Repository geladen oder aktualisiert, so geht Subversion bei Vorhandensein der entsprechenden Eigenschaft die Datei durch und ersetzt die angegebenen Platzhalter durch entsprechende Informationen. Für das Beispiel oben müsste also zumindest der Wert „Date Revision Author“ gesetzt sein, damit alle drei Platzhalter erkannt und ersetzt werden. Im Ergebnis sieht das dann beispielsweise so aus:

/*******************************************************************
 *               Google Analytics ASP.NET Server Control
 *******************************************************************
 * 
 * $LastChangedDate: 2008-07-06 13:33:56 +0200 (So, 06 Jul 2008) $
 * $LastChangedRevision: 21 $
 * $LastChangedBy: pheine $
 * 
 *******************************************************************/

Die Revisionsnummer entspricht dabei der Revision, in der diese Datei tatsächlich geändert wurde und nicht der aktuellen Revision des Repositories. In der folgenden Tabelle stehen alle Platzhalter und der dazugehörige Wert der Eigenschaft svn:keywords. In der Regel sind die Namen selbsterklärend, im Zweifelsfall hilft ein kurzer Blick in die (englische) Dokumentation oder auch einfach Ausprobieren.

Eigenschaftswert Zu ersetzende Zeichenfolge in der Datei Alternative Zeichenfolge
Date $LastChangedDate$ $Date$
Revision $LastChangedRevision$ $Revision$
Author $LastChangedBy$ $Author$
Id $Id$  
HeadURL $HeadURL$ $URL$

Wie setzte ich nun so eine Eigenschaft für eine Datei? Auf der Kommandozeile funktioniert das mit dem folgenden Aufruf von Subversion:

svn propset svn:keywords "Date Revision Author" GAControl.cs

Ein wenig bequemer geht es unter Windows mit der Explorer-Erweiterung TortoiseSVN. Hier klicken wir die entsprechende Datei einfach mit der rechten Maustaste an, wählen aus dem Kontextmenü „Properties“ und im sich öffnenden Dialog den Karteireiter „Subversion“. Hier gibt es unter anderem auch den Button „Properties…“. Klickt man diesen kann, kann man die neue Eigenschaft svn:keywords bequem über den Button „New…“ hinzufügen.

imageEine weitere Möglichkeit besteht außerdem darin, die Konfiguration von Subversion soweit anzupassen, dass bestimmte Dateitypen automatisch die entsprechende Dateieigenschaft gesetzt bekommen, wenn man sie dem Repository hinzufügt. Hierfür gibt es einen eigenen Konfigurationsabschnitt:

[auto-props]
*.asp = svn:eol-style=native;svn:keywords=Id Date Revision Author URL
*.aspx = svn:eol-style=native;svn:keywords=Id Date Revision Author URL
*.cs = svn:eol-style=native;svn:keywords=Id Date Revision Author URL
*.html = svn:eol-style=native;svn:keywords=Id Date Revision Author URL

Diese Möglichkeit gibt es natürlich auch bei Verwendung von TortoiseSVN. Dafür muss man in den Settings lediglich auf den Button „Edit“ bei „Subversion configuration file“ gehen.

Questions/Suggestions
As always, for questions or feedback, contact me or leave a comment.

Octocat by GitHubEdit this page on GitHub