En général, Subversion se débrouille mieux avec les fichiers binaires que CVS. Comme CVS utilise RCS, il est seulement capable de stocker successivement des copies entières d'un fichier binaire modifié. Subversion, en revanche, utilise un algorithme de différenciation binaire, indépendant du contenu textuel ou binaire des fichiers, pour déterminer les différences entre les fichiers. Cela veut dire que tous les fichiers sont stockés de manière différentielle (compressée) dans le dépôt.
Les utilisateurs de CVS doivent marquer les fichiers binaires
avec l'indicateur -kb
pour empêcher que les
données ne soient corrompues (par l'expansion des mots-clés et les
conversions de fins de lignes). Ils oublient quelquefois de le
faire.
Subversion utilise une approche plus paranoïaque. Premièrement, il ne fait aucune substitution de mot-clé ou de fin de ligne à moins qu'on ne le lui demande explicitement (voir la section intitulée « Substitution de mots-clés » et la section intitulée « Caractères de fin de ligne » pour plus de détails). Par défaut, Subversion considère que les fichiers de données sont des suites littérales d'octets et les fichiers sont toujours stockés dans le dépôt dans un état « non-converti ».
Deuxièmement, Subversion conserve une notion interne pour le contenu de chaque fichier : « texte » ou « binaire ». Mais cette notion ne s'applique qu'à la copie de travail locale. Lors d'un svn update, Subversion effectue des fusions contextuelles sur les fichiers texte modifiés localement mais ne tente pas d'en faire autant pour les fichiers binaires.
Pour déterminer si une fusion contextuelle est possible,
Subversion examine la propriété svn:mime-type
.
Si le fichier ne possède pas la propriété
svn:mime-type
ou si le type MIME est textuel
(par exemple text/*
), Subversion considère que
c'est du texte. Sinon, Subversion considère que le fichier est
binaire. Subversion aide également les utilisateurs en incluant
l'exécution d'un algorithme de détection des fichiers binaires
dans les commandes svn import
et svn add. Ces commandes tentent de deviner
puis affectent (éventuellement) un type binaire à la propriété
svn:mime-type
du fichier ajouté (si Subversion
se trompe dans la détection, l'utilisateur peut toujours supprimer
ou éditer à la main la propriété).