Im Großen und Ganzen geht Subversion mit Binärdateien eleganter um als CVS. Da CVS RCS verwendet, kann es nur aufeinanderfolgende vollständige Kopien einer sich ändernden Binärdatei abspeichern. Subversion jedoch stellt Unterschiede zwischen Dateien mithilfe eines binären Differenzalgorithmus dar. Das bedeutet, dass alle Dateien als (komprimierte) Differenzen im Projektarchiv abgespeichert werden.
Benutzer von CVS müssen binäre Dateien mit der Option
-kb
kennzeichnen, um zu verhindern, dass die
Daten verfälscht werden (aufgrund von Schlüsselwortersetzung und
der Umwandlung von Zeilenenden). Manchmal vergessen sie
es.
Subversion schlägt den paranoideren Weg ein. Erstens macht es keinerlei Schlüsselwortersetzung oder Zeilenendenumwandlung, es sei denn, Sie fordern es ausdrücklich dazu auf (Einzelheiten unter „Ersetzung von Schlüsselworten“ und „Zeichenfolgen zur Zeilenende-Kennzeichnung“). Standardmäßig behandelt Subversion alle Dateiinhalte als Byteketten, und Dateien werden stets ohne Umwandlung im Projektarchiv gespeichert.
Zweitens besitzt Subversion eine interne Auffassung, ob eine Datei „textuellen“ oder „binären“ Inhalt hat, doch besteht diese Auffassung nur in der Arbeitskopie. Während eines svn update unternimmt Subversion für lokal veränderte Textdateien eine kontextabhängige Zusammenführung, versucht das allerdings nicht bei Binärdateien.
Um festzustellen, ob eine kontextabhängige Zusammenführung
möglich ist, überprüft Subversion die Eigenschaft
svn:mime-type
. Falls die Datei keine Eigenschaft
svn:mime-type
besitzt, oder ein textueller
MIME-Typ ist (z.B. text/*
), nimmt Subversion
an, dass es sich um eine Textdatei handelt. Anderenfalls nimmt
Subversion an, dass die Datei binär ist. Subversion hilft
Benutzern auch, indem es einen Algorithmus zur Erkennung von
Binärdaten bei den Befehlen svn import und
svn add ausführt. Diese Befehle werden eine
gute Schätzung machen und (möglicherweise) eine binäre Eigenschaft
svn:mime-type
auf die hinzuzufügende
Datei setzen. (Falls sich Subversion verschätzt, kann der
Benutzer stets die Eigenschaft entfernen oder manuell
bearbeiten.)