web-dev-qa-db-fra.com

Comment dire à Subversion de traiter un fichier comme un fichier binaire?

Comment dire à Subversion (svn) de traiter un fichier comme un fichier binaire?

62
Nick

Il est possible d'identifier manuellement un fichier situé dans un référentiel comme binaire en utilisant:

svn propset svn:mime-type application/octet-stream <filename>

Cela n'est généralement pas nécessaire, car Subversion tentera de déterminer si un fichier est binaire lors de son premier ajout. Si Subversion marque incorrectement un certain type comme "texte" alors qu'il doit être traité comme binaire, il est possible de configurer fonctionnalité d'accessoires automatiques de Subversion pour marquer automatiquement ce fichier avec un type MIME non textuel. Quelles que soient les propriétés configurées sur le fichier, Subversion stocke toujours le fichier au format binaire 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 binaires, comme svn diff et svn blâme . Il permet également une conversion de fin de ligne automatique, qui est configurable client par client.

Pour plus d'informations, consultez Comment Subversion gère-t-il les fichiers binaires?

81
stormlash

À partir de la page 367 du livre Subversion

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

Les utilisateurs CVS doivent marquer les fichiers binaires avec des indicateurs -kb pour éviter que les données ne soient altéré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 aucun type de traduction de mots clés ou de fin de ligne à moins que vous ne le lui demandiez 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" pour plus de détails). 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 des données "texte" ou "binaires", mais cette notion n'existe que dans la copie de travail. Lors d'une mise à jour svn, Subversion effectuera des fusions contextuelles sur les fichiers texte modifiés localement, mais ne tentera pas de le faire pour les fichiers binaires.

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

L'édition manuelle serait effectuée par

svn propset svn:mime-type some/type filename.extension
21
Evil Andy

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

svn propset svn:mime-type application/octet-stream <filename>
15
KTamas

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 à ajouter le fichier sans propriétés, puis à définir les propriétés dans une deuxième é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
13
user1454388

Par exemple:

svn propset svn:mime-type image/png foo.png
8
Jan Krüger

Bien que Subversion essaie de détecter automatiquement si un fichier est binaire 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 que votre fichier agira comme une collection d'octets plutôt que comme un fichier texte. Voir aussi le manuel svn sur Portabilité des fichiers .

4
grammar31

Si vous utilisez svn tortue dans Windows, faites un clic droit sur le fichier et accédez aux propriétés. Cliquez sur nouveau et ajoutez une nouvelle propriété de type svn: type mime. Pour la valeur mise: application/octet-stream

3
Brian R. Bondy

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

2
Adrian Petrescu

svn recherche une propriété de type mime, devinant qu'il s'agit de 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

2
Paul Dixon

Il le fait généralement par défaut pour vous, mais si ce n'est pas le cas, vous devez examiner les propriétés du fichier et propset.

0
Frank Wiles