Diese Dokumentation wurde zur Beschreibung der Serie 1.6.x von Subversion erstellt. Falls Sie eine unterschiedliche Version von Subversion einsetzen, sei Ihnen dringend angeraten, bei http://www.svnbook.com/ vorbeizuschauen und stattdessen die zu Ihrer Version von Subversion passende Version dieser Dokumentation heranzzuiehen.
Es besteht in jeder gegebenen Arbeitskopie die Wahrscheinlichkeit, dass sich neben all den versionierten Dateien und Verzeichnissen auch andere Dateien und Verzeichnisse befinden, die weder versioniert sind noch versioniert werden sollen. Texteditoren müllen Arbeitskopien mit Sicherungskopien zu, Software-Compiler erzeugen Zwischen-, oder gar Zieldateien, die Sie normalerweise nie versionieren würden. Auch Benutzer selbst legen verschiedene andere Dateien und Verzeichnisse dort ab, wo es ihnen passt, oft in versionskontrollierten Arbeitskopien.
Es ist albern, anzunehmen, dass Arbeitskopien von Subversion irgendwie immun gegen diese Art von Durcheinander und Verunreinigung seien. Tatsächlich sieht es Subversion als ein Feature an, dass seine Arbeitskopien lediglich gewöhnliche Verzeichnisse sind, genau wie unversionierte Dateibäume. Allerdings können diese nicht zu versionierenden Dateien und Verzeichnisse bisweilen Ärger für Subversion-Benutzer machen. Da beispielsweise die Befehle svn add und svn import standardmäßig rekursiv arbeiten und nicht wissen, welche der Dateien im Baum Sie versionieren möchten und welche nicht, ist es leicht möglich, dass etwas unbeabsichtigt unter Versionskontrolle gebracht wird. Und weil svn status standardmäßig jedes interessante Objekt einer Arbeitskopie aufzeigt – inklusive unversionierter Dateien und Verzeichnisse – kann dessen Ausgabe gerade dort ziemlich verrauscht sein, wo sich viele dieser Dinge befinden.
Also bietet Ihnen Subversion zwei Möglichkeiten, um ihm mitzuteilen, welche Dateien Sie lieber nicht beachten möchten. Die eine Möglichkeit verwendet das Laufzeit-Konfigurationssystem (siehe „Laufzeit-Konfigurationsbereich“) und wirkt sich deshalb auf alle Funktionen von Subversion aus, die diese Laufzeit-Einstellungen verwenden – im Allgemeinen diejenigen, die auf einem bestimmten Rechner oder durch einen bestimmten Benutzer ausgeführt werden. Die andere Möglichkeit nutzt Subversions Unterstützung für Verzeichnis-Eigenschaften und ist enger an den versionierten Baum gebunden, so dass hiervon jeder betroffen ist, der eine Arbeitskopie dieses Baumes besitzt. Beide dieser Möglichkeiten benutzen Dateimuster (Ketten aus normalen Zeichen und solchen mit besonderer Bedeutung, die mit Dateinamen verglichen werden), um zu entscheiden, welche Dateien ignoriert werden können.
Das Laufzeit-Konfigurationssystem von Subversion stellt eine
Option global-ignores
zur Verfügung, dessen
Wert eine Sammlung von Dateimustern ist, die durch Leerraum
getrennt sind. Der Subversion-Client vergleicht diese Muster
sowohl mit den Dateinamen der unter Versionskontrolle zu
bringenden Kandidaten als auch mit den Namen der
unversionierten Dateien, die svn status
erkennt. Falls der Name irgendeiner Datei zu einem Muster
passt, verhält sich Subversion grundsätzlich so, als würde die
Datei gar nicht vorhanden sein. Das ist wirklich nützlich für
die Sorte von Dateien, die Sie fast nie versionieren möchten,
etwa Sicherheitskopien von Editoren wie die
*~
- und .*~
-Dateien von
Emacs.
Wenn die Eigenschaft svn:ignore
an einem
versionierten Verzeichnis auftritt, wird erwartet, dass der Wert
eine Liste von (durch Zeilenvorschübe getrennten) Dateimustern
enthält, die Subversion benutzen soll, um ignorierbare Objekte
in diesem Verzeichnis zu bestimmen. Diese Dateimuster setzen
nicht jene außer Kraft, die in der
Laufzeit-Konfigurations-Option global-ignores
gefunden werden, sondern werden an deren Liste angehängt. An
dieser Stelle lohnt es sich, noch einmal darauf hinzuweisen,
dass, anders als bei der Option
global-ignores
, die Muster der Eigenschaft
svn:ignore
nur für das Verzeichnis gelten, an
dem die Eigenschaft gesetzt ist, auch nicht für irgendein
Unterverzeichnis. Mit der Eigenschaft
svn:ignore
kann Subversion leicht angewiesen
werden, Dateien zu ignorieren, die in diesem Verzeichnis der
Arbeitskopie eines jeden Benutzers mit großer Wahrscheinlichkeit
auftreten, so wie Compiler-Ausgaben oder – um
ein Beispiel zu bringen, das diesem Buch angebrachter ist
– die HTML-, PDF- oder PostScript-Dateien, die als
Ergebnis der Umwandlung der DocBook-XML-Quelltext-Dateien in ein
lesbareres Format erzeugt werden.
Anmerkung | |
---|---|
Die Unterstützung für ignorierbare Dateimuster in Subversion erstreckt sich lediglich auf die einmalige Handlung, unversionierte Dateien und Verzeichnisse unter Versionskontrolle zu stellen. Sobald ein Objekt unter Kontrolle von Subversion ist, haben die Ignorier-Muster keine Auswirkungen mehr auf das Objekt. Mit anderen Worten: erwarten Sie nicht, dass Subversion die Übertragung von Änderungen verhindert, die Sie an einer versionierten Datei vorgenommen haben, nur weil der Name dieser Datei auf ein Ignorier-Muster passt – Subversion beachtet stets alle seine versionierten Objekte. |
Die globale Liste mit Ignorier-Mustern neigt dazu, mehr eine
Sache des persönlichen Geschmacks zu sein und richtet sich eher
nach der Werkzeugkette eines Benutzers als nach den Bedürfnissen
einer bestimmten Arbeitskopie im einzelnen. Deshalb
konzentriert sich der Rest dieses Abschnitts auf die Eigenschaft
svn:ignore
und ihre Verwendung.
Angenommen, Sie haben die folgende Ausgabe von svn status:
$ svn status calc M calc/button.c ? calc/calculator ? calc/data.c ? calc/debug_log ? calc/debug_log.1 ? calc/debug_log.2.gz ? calc/debug_log.3.gz
In diesem Beispiel haben Sie einige Änderungen an
Eigenschaften von button.c
vorgenommen,
aber Sie haben in Ihrer Arbeitskopie auch einige unversionierte
Dateien: das neueste Programm calculator
,
das Sie aus Ihrem Quelltext compiliert haben, eine
Quelltextdatei namens data.c
und eine Menge
von Protokolldateien zur Fehlersuche. Sie wissen, dass das
Build-System stets ein Programm calculator
erzeugt.[16] Und Sie wissen, das die
Testumgebung immer diese Protokolldateien hinterlässt. Das
trifft auf alle Arbeitskopien dieses Projektes zu, nicht nur auf
Ihre eigene. Und Sie wissen, dass Sie kein Interesse daran
haben, diese Dinge bei jedem Aufruf von svn
status zu sehen, Sie sind sich auch ziemlich sicher,
dass sich andere auch nicht dafür interessieren. Also rufen Sie
svn propedit svn:ignore calc
auf, um dem
Verzeichnis calc
ein paar Ignorier-Muster
hinzuzufügen.
$ svn propget svn:ignore calc calculator debug_log* $
Nach dem Hinzufügen dieser Eigenschaft haben Sie nun eine
Eigenschafts-Änderung für das Verzeichnis
calc
. Beachten Sie jedoch, was sonst noch
anders an Ihrer svn status-Ausgabe ist:
$ svn status M calc M calc/button.c ? calc/data.c
Nun fehlt der überflüssige Müll in der Ausgabe! Das
compilierte Programm calculator
und all
diese Protokolldateien befinden sich immer noch in Ihrer
Arbeitskopie; Subversion erinnert Sie nur nicht mehr ständig
daran, dass sie vorhanden und unversioniert sind. Und nachdem
nun der ganze Lärm aus der Anzeige verschwunden ist, verbleiben
die fesselnderen Objekte – wie z.B. die Quelltextdatei
data.c
, die Sie wahrscheinlich vergessen
hatten, unter Versionskontrolle zu stellen.
Natürlich ist dieser kompaktere Bericht des
Zustandes Ihrer Arbeitskopie nicht der einzig verfügbare. Falls
Sie wirklich die ignorierten Dateien im Bericht sehen möchten,
können Sie Subversion die Option --no-ignore
mitgeben:
$ svn status --no-ignore M calc M calc/button.c I calc/calculator ? calc/data.c I calc/debug_log I calc/debug_log.1 I calc/debug_log.2.gz I calc/debug_log.3.gz
Wie bereits früher erwähnt, wird die Liste der zu
ignorierenden Dateimuster auch von svn add
und svn import verwendet. Beide dieser
Befehle haben zur Folge, dass Subversion damit beginnt, eine
Menge von Dateien und Verzeichnissen zu verwalten.
Statt den Benutzer zu zwingen, die Dateien aus einem Dateibaum
auszuwählen, die unter Versionskontrolle gestellt werden sollen,
verwendet Subversion die Ignorier-Muster – sowohl die
globalen als auch die verzeichnisgebundenen Listen – um
festzustellen, welche Dateien nicht im Rahmen einer größeren
rekursiven Hinzufüge- oder Importaktion in das
Versionskontrollsystem gebracht werden sollen. Auch hier können
Sie wieder die Option --no-ignore
verwenden, um
Subversion mitzuteilen, die Ignorier-Listen zu ignorieren und
auf allen vorhandenen Dateien und Verzeichnissen zu arbeiten.
Tipp | |
---|---|
Selbst wenn |