2008-09-16 13 views

Respuesta

74

Es posible identificar manualmente un archivo que se encuentra dentro de un repositorio como binario mediante el uso de:

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

Esto generalmente no es necesario, ya que Subversion intentará determinar si un archivo es binario cuando el archivo primero se agrega. Si Subversion está etiquetando incorrectamente un cierto tipo como "texto" cuando debe tratarse como binario, es posible configurar Subversion auto-props feature para etiquetar automáticamente ese archivo con un tipo MIME que no sea de texto. Independientemente de las propiedades configuradas en el archivo, Subversion aún almacena el archivo en un formato binario dentro del repositorio.

Si Subversion identifica el tipo MIME como un tipo de "texto", que permite a ciertas características que no están disponibles en archivos binarios, como diff SVN SVN y culpan. También permite la conversión automática de final de línea, que se puede configurar cliente por cliente.

Para obtener más información, ver How does Subversion handle binary files?

+6

Necesitaba lo contrario; usando 'text/plain' trabajado! – Hashbrown

8

Por ejemplo:

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

Según el Subversion FAQ, puede utilizar propset SVN para cambiar el svn: mime-tipo propiedad a application/octet-stream

14

Básicamente, usted tiene que establecer el tipo MIME a octet-stream:

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

Por lo general hace esto por defecto para ti, pero si no es usted necesita buscar propiedades de archivos y propset.

19

En la página 367 del Subversion book

En el sentido más general, Subversion maneja ficheros binarios más elegantemente que CVS. Como CVS utiliza RCS, solo puede almacenar copias completas sucesivas de un archivo binario cambiante. Subversion, sin embargo, expresa las diferencias entre los archivos que utilizan un algoritmo de diferenciación binaria, independientemente de si contienen datos textuales o binarios. Eso significa que todos los archivos están almacenados diferencialmente (comprimidos) en el repositorio.

Los usuarios de CVS tienen que marcar los archivos binarios con -kb flags para evitar que los datos se confundan (debido a para la expansión de palabras clave y las traducciones de final de línea). A veces se olvidan de hacer esto.

Subversion toma la ruta más paranoica. Primero, nunca realiza ningún tipo de palabra clave o finalización de línea a menos que explícitamente se lo solicite (consulte la sección llamada "Palabra clave Sustitución" y la sección llamada "Secuencias de caracteres de fin de línea" para obtener más información) . De manera predeterminada, Subversion trata todos los datos de archivo como cadenas de bytes literales, y los archivos se almacenan siempre en el repositorio en un estado no traducido.

En segundo lugar, Subversion mantiene una noción interna de si un archivo es de datos "de texto" o "binarios", , pero esta noción solo existe en la copia de trabajo. Durante una actualización de svn, Subversion hará realizar fusiones contextuales en archivos de texto modificados localmente, pero no intentará hacerlo para los archivos binarios .

Para determinar si es posible una fusión contextual, Subversion examina la propiedad svn: mime-type. Si el archivo no tiene propiedad svn: mime-type, o tiene un tipo MIME que es textual (por ejemplo, text/*), Subversion asume que es texto. De lo contrario, Subversion asume que el archivo es binario. Subversion también ayuda a los usuarios ejecutando un algoritmo de detección binaria en los comandos svn import y svn add. Estos comandos harán una buena conjetura y luego (posiblemente) establecerán una propiedad binaria svn: mime-type en el archivo que se está agregando. (Si la suposición de Subversion es incorrecta, el usuario siempre puede eliminar o editar manualmente la propiedad.)

edición manual se haría mediante

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

¿Cómo se hace esto en la importación? Es decir, __antes de__ entra al repositorio? El caso de uso que tengo es un archivo que svn no importa porque cree que es texto mal formado (terminaciones de línea inconsistentes). Pero son ** datos de prueba **, por lo que el archivo está ** destinado ** a tener terminaciones de línea inconsistentes .... –

3

Si se utiliza Tortoise SVN en Windows, haga clic derecho sobre el archivo y vaya a propiedades. Haga clic en nuevo y agregue una nueva propiedad de tipo svn: mime-type. Para el valor de venta: application/octet-stream

4

Aunque Subversion trata de automatically detect si un archivo es binario o no, puede anular el tipo mime utilizando svn propset. Por ejemplo, svn propset svn:mime-type application/octet-stream example.txt. Esto hará que su archivo actúe como una colección de bytes en lugar de un archivo de texto. Vea también, el manual de svn en File Portability.

+0

Solo para actualizar su enlace para el algoritmo de detección automática: http://subversion.apache.org /faq.html#binary-files – oldNoakes

12

Si 'svn add' supone el tipo incorrecto y le da un error como el siguiente:

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

entonces la solución es agregar el archivo sin propiedades y luego configure las propiedades en un segundo paso:

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 
Cuestiones relacionadas