Diese Dokumentation wurde zur Beschreibung der Serie 1.7.x von Apache™ 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.
Glücklicherweise verhält sich das Kommandozeilenprogramm von Subversion für routinemäßig auf verschiedenen Rechnern mit unterschiedlichen Betriebssystemen arbeitende Benutzer unter all diesen Betriebssystemen fast identisch. Wenn Sie wissen, wie svn auf der einen Plattform eingesetzt wird, wissen Sie auch, wie es woanders geht.
Jedoch trifft das nicht immer auf andere allgemeine Klassen von Software zu oder die eigentlichen Dateien, die Sie mit Subversion verwalten. Beispielsweise ist die Definition einer „Textdatei“ auf einer Windows-Maschine ähnlich der auf einer Linux-Kiste, jedoch mit einem wichtigen Unterschied: die Zeichenfolge zum Markieren der Zeilenenden dieser Dateien. Es gibt auch andere Unterschiede. Unix-Plattformen haben symbolische Links (die Subversion unterstützt), während es sie unter Windows nicht gibt. Unix-Plattformen verwenden Dateisystem-Berechtigungen, um die Ausführbarkeit zu ermitteln, während Windows Dateiendungen benutzt.
Da Subversion nicht in der Position ist, die gesamte Welt durch gemeinsame Definitionen und Implementierungen all dieser Dinge zu vereinen, ist das beste, was es tun kann, Ihr Leben zu vereinfachen, falls Sie mit Ihren versionierten Dateien und Verzeichnissen auf mehreren Rechnern und Betriebssystemen arbeiten müssen. Dieser Abschnitt beschreibt einige der Methoden, die Subversion hierfür verwendet.
Subversion reiht sich unter den zahlreichen Anwendungen
ein, die die Multipurpose Internet Mail Extensions (MIME)
Inhaltstypen erkennen und verwenden. Außer ein universeller
Lagerort für den Inhaltstypen einer Datei zu sein, bestimmt
der Wert der Datei-Eigenschaft
svn:mime-type
einige Verhaltensweisen von
Subversion selbst.
Beispielsweise ist einer der Vorteile, die Subversion
typischerweise mitbringt, die kontextabhängige, zeilenbasierte
Zusammenführung der vom Server während einer Aktualisierung
empfangenen Änderungen mit Ihrer Arbeitsdatei. Allerdings gibt
es bei Dateien, deren Inhalt nicht aus Text besteht, oft nicht
das Konzept einer „Zeile“. Damit versucht
Subversion während einer Aktualisierung keine
kontextabhängigen Zusammenführungen für versionierte Dateien,
deren Eigenschaft svn:mime-type
auf einen
nicht-textuellen MIME-Typen gesetzt ist (normalerweise etwas,
das nicht mit text/
beginnt, obwohl es
Ausnahmen gibt). Stattdessen wird jedes Mal, wenn eine von
Ihnen lokal veränderte binäre Datei in der Arbeitskopie
aktualisiert werden soll, diese nicht angerührt, sondern
Subversion erzeugt zwei neue Dateien. Eine davon hat die
Dateiendung .oldrev
und beinhaltet die
BASE-Revision der Datei. Die andere Datei hat eine
.newrev
-Endung und beinhaltet die
aktualisierte Revision der Datei. Dieses Verhalten dient
tatsächlich dem Schutz des Benutzers vor fehlgeschlagenen
Versuchen, kontextabhängige Zusammenführungen mit Dateien zu
machen, die einfach nicht kontextabhängig zusammengeführt
werden können.
Darüber hinaus rufen Dateien nicht-textuellen MIME-Typs
Fehler hervor, wenn Sie als Ziele von Operationen wie
svn diff und svn
annotate verwendet werden, da zeilenbasierte
Unterschiede und Anmerkungen offensichtlich an eine sinnvolle
Definition von „Zeile“ für eine gegebene Datei
geknüpft sind. Das kann besonders frustrierend für Anwender
von XML-Dateien sein, deren Eigenschaft
svn:mime-type
einen Wert wie etwa
application/xml
besitzt, der nicht
eindeutig menschenlesbar ist und somit von Subversion als
nicht-textuell behandelt wird. Glücklicherweise bieten diese
Unterbefehle eine Option --force
an, die
Subversion zwingen, diese Operationen trotz der anscheinenden
Nicht-Menschenlesbarkeit der Dateien zu versuchen.
Warnung | |
---|---|
Falls die Eigenschaft |
Subversion stellt eine Anzahl von Mechanismen zur
Verfügung, mit denen automatisch die Eigenschaft
svn:mime-type
an einer versionierten Datei
gesetzt werden kann. Siehe „Automatisches Setzen von Eigenschaften“ für Details.
Falls die Eigenschaft svn:mime-type
gesetzt ist, verwendet auch das Subversion-Apache-Modul dessen
Wert, um den HTTP-Header Content-type:
zu
füllen, wenn es auf GET-Anfragen antwortet. Das gibt Ihrem
Web-Browser einen wichtigen Hinweis darauf, wie die Datei
darzustellen ist, wenn Sie sie benutzen, um den Inhalt Ihres
Subversion-Projektarchivs zu durchstöbern.
Unter vielen Betriebssystemen hängt die Fähigkeit, eine
Datei als Befehl ausführen zu können, vom Vorhandensein eines
Ausführbarkeits-Erlaubnis-Bits ab. Normalerweise ist dieses
Bit standardmäßig nicht aktiviert und muss vom Benutzer für
jede Datei gesetzt werden, die es benötigt. Es wäre aber ein
Riesenstress, sich exakt diejenigen Dateien in einer frisch
ausgecheckten Arbeitskopie merken zu müssen, die das
Ausführbarkeits-Bit gesetzt haben sollen und es dann zu
aktivieren. Deshalb stellt Subversion die Eigenschaft
svn:executable
zur Verfügung, um die
Dateien zu markieren, die das Ausführbarkeits-Bit benötigen.
Beim Auschecken berücksichtigt Subversion diesen Wunsch wenn
es die Arbeitskopie mit solchen Dateien füllt.
Diese Eigenschaft hat keine Auswirkungen auf
Dateisystemen, die das Konzept eines Ausführbarkeits-Bits
nicht kennen, so wie FAT32 und NTFS[18]. Darüber hinaus erzwingt
Subversion beim Setzen dieser Eigenschaft den Wert
*
, obwohl sie keine definierten Werte
besitzt. Zum Schluss sei gesagt, dass diese Eigenschaft nur
auf Dateien gültig ist, nicht auf Verzeichnissen.
Falls der Inhalt einer versionierten Datei durch deren
Eigenschaft svn:mime-type
nicht anders
gekennzeichnet ist, nimmt Subversion an, es handele sich
um menschenlesbare Daten. Im Allgemeinen verwendet Subversion
dieses Wissen lediglich, um festzustellen, ob Unterschiede
kontextabhängig dargestellt werden können. Ansonsten sind
für Subversion Bytes einfach Bytes.
Das bedeutet, dass Subversion von sich aus überhaupt
nicht auf die von Ihren Dateien benutzte Sorte von
Zeilenende-Markierungen (EOL-Marker)
achtet. Leider haben unterschiedliche Betriebssysteme auch
unterschiedliche Konventionen hinsichtlich der Zeichenfolgen,
die das Ende einer Textzeile in einer Datei repräsentieren.
Beispielsweise ist die gebräuchliche Zeilenende-Kennzeichnung,
die von Software auf der Windows-Plattform benutzt wird, ein
Paar aus ASCII-Kontrollzeichen – ein Wagenrücklauf
(CR
) gefolgt von einem Zeilenvorschub
(LF
). Unix Software verwendet jedoch nur
das Zeichen LF
, um Zeilenenden
zu kennzeichnen.
Nicht alle der zahlreichen Werkzeuge unter diesen
Betriebssystemen können mit Dateien umgehen, die Zeilenenden
in einem Format haben, das vom eigenen
Zeilenende-Stil des Betriebssystems abweicht,
auf dem sie laufen. Unix-Programme behandeln das in
Windows-Dateien vorkommende Zeichen CR
typischerweise als ein gewöhnliches Zeichen (welches
normalerweise als ^M
wiedergegeben wird),
und Windows-Programme fügen alle Zeilen einer Unix-Datei zu
einer großen Zeile zusammen, da keine
Wagenrücklauf-Zeilenvorschub-Kombination (oder
CRLF
) zur Zeilenendemarkierung gefunden
wurde.
Diese Empfindlichkeit gegenüber fremden EOL-Markern kann für Menschen frustrierend sein, die eine Datei über Betriebssystemgrenzen hinweg gemeinsam benutzen. Schauen wir uns beispielsweise eine Quelltextdatei an, die Entwickler sowohl unter Windows als auch unter Unix bearbeiten. Falls die Entwickler stets Werkzeuge verwenden, die den Zeilenende-Stil der Datei bewahren, werden keine Probleme auftreten.
In der Praxis jedoch scheitern viele verbreitete Werkzeuge daran, eine Datei mit fremden EOL-Markern richtig zu lesen, oder sie wandeln die Zeilenenden der Datei beim Schreiben in den eigenen Stil. Falls ersteres für einen Entwickler zutrifft, muss ein externes Umwandlungsprogramm verwendet werden (etwa dos2unix oder sein Gegenstück unix2dos), um die Datei für die Bearbeitung vorzubereiten. Im letzteren Fall ist keine spezielle Vorbereitung notwendig. In beiden Fällen jedoch ist das Ergebnis eine Datei, die sich buchstäblich in jeder Zeile vom Original unterscheidet. Vor der Übertragung seiner Änderungen hat der Benutzer zwei Möglichkeiten: Entweder kann er mit einem Umwandlungsprogramm den Zeilenende-Stil wiederherstellen, den die Datei vor den Änderungen aufwies, oder er überträgt die Datei einfach – neue EOL-Marker und alles andere inklusive.
Unter dem Strich bedeuten derartige Szenarien Zeitverschwendung und unnötige Änderungen an übertragenen Dateien. Zeitverschwendung ist schlimm genug. Falls jedoch durch die Übertragungen alle Zeilen einer Datei geändert werden, erschwert das die Aufgabe, herauszufinden, welche Zeilen sich auf eine nicht-triviale Art und Weise geändert haben. Wo wurde der Fehler tatsächlich behoben? In welcher Zeile hat sich ein Syntaxfehler eingeschlichen?
Die Lösung für dieses Problem ist die Eigenschaft
svn:eol-style
. Wird sie auf einen gültigen
Wert gesetzt, benutzt Subversion sie, um festzustellen, welche
besondere Behandlung für diese Datei notwendig ist, um das
ständige durch unterschiedliche Betriebssysteme bedingte Hin
und Her der Zeilenende-Stile bei jeder Übertragung zu
vermeiden. Die gültigen Werte sind:
native
Das führt dazu, dass die Datei die EOL-Marker
enthält, die in dem Betriebssystem üblich sind,
unter dem Subversion läuft. Mit anderen Worten: Falls ein
Benutzer auf einem Windows-Rechner eine Arbeitskopie
auscheckt, zu der eine Datei mit einer auf
native
gesetzten Eigenschaft
svn:eol-style
gehört, wird die Datei
CRLF
-EOL-Marker beinhalten. Ein
Unix-Benutzer, der eine Arbeitskopie mit derselben Datei
auscheckt, wird in seiner Kopie der Datei
LF
-EOL-Marker sehen.
Beachten Sie, dass Subversion die Datei, unabhängig
vom Betriebssystem, tatsächlich unter Verwendung
normalisierter LF
-EOL-Marker im
Projektarchiv ablegt. Das geschieht jedoch grundsätzlich
transparent für den Benutzer.
CRLF
Das führt dazu, dass die Datei unabhängig vom
Betriebssystem die Zeichenfolge CRLF
als EOL-Marker enthält.
LF
Das führt dazu, dass die Datei unabhängig vom
Betriebssystem das Zeichen LF
als
EOL-Marker enthält.
CR
Das führt dazu, dass die Datei unabhängig vom
Betriebssystem das Zeichen CR
als
EOL-Marker enthält. Dieser Zeilenende-Stil ist nicht
sehr verbreitet