Comment puis-je demander à Subversion de traiter un fichier en tant que fichier binary?

Comment puis-je dire à Subversion (svn) de traiter un fichier comme un fichier binary?

Il est possible d’identifier manuellement un fichier situé dans un référentiel en tant que fichier binary en utilisant:

svn propset svn:mime-type application/octet-stream  

Cela n’est généralement pas nécessaire, car Subversion tentera de déterminer si un fichier est binary lorsque le fichier est ajouté pour la première fois. Si Subversion marque incorrectement un certain type en tant que “texte” alors qu’il devrait être traité comme un fichier binary, il est possible de configurer la fonctionnalité auto-props de Subversion pour baliser automatiquement ce fichier avec un type MIME non textuel. Quelles que soient les propriétés configurées dans le fichier, Subversion stocke toujours le fichier dans un format binary dans le référentiel.

Si Subversion identifie le type MIME comme un type “texte”, il active certaines fonctionnalités qui ne sont pas disponibles sur les fichiers binarys, telles que svn diff et svn blame . Il permet également une conversion automatique de fin de ligne, configurable client par client.

Pour plus d’informations, voir Comment Subversion gère-t-il les fichiers binarys?

De la page 367 du livre Subversion

Dans le sens le plus général, Subversion gère les fichiers binarys de manière plus élégante que CVS. Parce que CVS utilise RCS, il ne peut stocker que des copies complètes successives d’un fichier binary changeant. Subversion, cependant, exprime les différences entre les fichiers en utilisant un algorithme de différenciation binary, qu’ils contiennent des données textuelles ou binarys. Cela signifie que tous les fichiers sont stockés différemment (compressés) dans le référentiel.

Les utilisateurs de CVS doivent marquer les fichiers binarys avec des indicateurs -kb pour empêcher toute déformation des données (en raison de l’expansion des mots clés et des traductions de fin de ligne). Ils oublient parfois de le faire.

Subversion prend la voie la plus paranoïaque. Tout d’abord, il n’effectue jamais aucune traduction de mot-clé ou de fin de ligne sauf si vous le lui demandez explicitement (voir la section intitulée «Substitution de mots-clés» et la section intitulée «Séquences de caractères de fin de ligne»). Par défaut, Subversion traite toutes les données de fichier comme des chaînes d’octets littéraux et les fichiers sont toujours stockés dans le référentiel dans un état non traduit.

Deuxièmement, Subversion maintient une notion interne de savoir si un fichier est une donnée «texte» ou «binary», mais cette notion existe uniquement dans la copie de travail. Pendant une mise à jour de svn, Subversion effectuera des fusions contextuelles sur des fichiers texte modifiés localement, mais ne tentera pas de le faire pour les fichiers binarys.

Pour déterminer si une fusion contextuelle est possible, Subversion examine la propriété svn: mime-type. Si le fichier n’a pas de propriété svn: mime-type ou un type MIME textuel (par exemple, text / *), Subversion suppose qu’il s’agit d’un texte. Sinon, Subversion suppose que le fichier est binary. Subversion aide également les utilisateurs en exécutant un algorithme de détection binary dans les commandes svn import et svn add. Ces commandes feront une bonne supposition et définiront (éventuellement) une propriété svn: mime-type binary sur le fichier ajouté. (Si Subversion se trompe, l’utilisateur peut toujours supprimer ou modifier manuellement la propriété.)

L’édition manuelle se ferait par

 svn propset svn:mime-type some/type filename.extension 

Fondamentalement, vous devez définir le type mime sur octet-stream:

 svn propset svn:mime-type application/octet-stream  

Si ‘svn add’ devine le type incorrect et vous donne une erreur comme celle-ci:

 svn: E200009: File 'qt/examples/dialogs/configdialog/images/config.png' has inconsistent newlines svn: E135000: Inconsistent line ending style 

La solution consiste alors à append le fichier sans propriétés, puis à définir les propriétés dans une seconde étape:

 svn add --no-auto-props qt/examples/dialogs/configdialog/images/config.png svn propset svn:mime-type image/png qt/examples/dialogs/configdialog/images/config.png 

Par exemple:

 svn propset svn:mime-type image/png foo.png 

Bien que Subversion essaie de détecter automatiquement si un fichier est binary ou non, vous pouvez remplacer le type MIME en utilisant svn propset . Par exemple, svn propset svn:mime-type application/octet-stream example.txt . Cela fera de votre fichier une collection d’octets plutôt qu’un fichier texte. Voir aussi le manuel svn sur la portabilité des fichiers .

Si vous utilisez tortoise svn sous Windows, cliquez avec le bouton droit sur le fichier et accédez aux propriétés. Cliquez sur new et ajoutez une nouvelle propriété de type svn: mime-type. Pour la valeur mise: application / octet-stream

svn recherche une propriété de type mime, en devinant qu’il s’agit d’un texte s’il n’existe pas. Vous pouvez explicitement définir cette propriété, voir http://svnbook.red-bean.com/en/1.5/svn.forcvs.binary-and-trans.html

Conformément à la FAQ Subversion , vous pouvez utiliser svn propset pour changer la propriété svn: mime-type en application / octet-stream

Cela est généralement fait par défaut pour vous, mais si ce n’est pas le cas, vous devez examiner les propriétés des fichiers et les jeux de parameters.