Fichiers binaires et conversions

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é).