¿Cómo le digo a Subversion (svn) que trate un archivo como un archivo binario?
Es posible identificar manualmente un archivo ubicado dentro de un repositorio como binary usando:
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 se agrega por primera vez. Si Subversion está etiquetando incorrectamente un determinado tipo como "texto" cuando debe tratarse como binario, es posible configurar la función auto-props de Subversion 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", habilita ciertas funciones que no están disponibles en archivos binarios, como svn diff y svn blame . 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, consulte ¿Cómo maneja Subversion los archivos binarios?
De la página 367 del libro de Subversion
En el sentido más general, Subversion maneja los archivos binarios con más gracia que CVS. Debido a que CVS usa RCS, solo puede almacenar copias completas sucesivas de un archivo binario cambiante. Sin embargo, Subversion expresa las diferencias entre los archivos utilizando un algoritmo de diferenciación binario, independientemente de si contienen datos textuales o binarios. Eso significa que todos los archivos se almacenan de forma diferencial (comprimidos) en el repositorio.
Los usuarios de CVS tienen que marcar los archivos binarios con marcas -kb para evitar que los datos se confundan (debido a la expansión de palabras clave y las traducciones de final de línea). A veces se olvidan de hacer esto.
Subversión toma la ruta más paranoica. En primer lugar, nunca realiza ningún tipo de palabra clave o traducción de final de línea a menos que se lo pida explícitamente (consulte la sección llamada "Sustitución de palabras clave" y la sección llamada "Secuencias de caracteres de fin de línea" para obtener más detalles). De forma predeterminada, Subversion trata todos los datos de archivos como cadenas de bytes literales, y los archivos siempre se almacenan 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 “binario”, pero esta noción solo existe en la copia de trabajo. Durante una actualización svn, Subversion realizará fusiones contextuales en archivos de texto modificados localmente, pero no intentará hacerlo para archivos binarios.
Para determinar si es posible una combinación contextual, Subversion examina la propiedad svn: mime-type. Si el archivo no tiene una propiedad svn: mime-type o si 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 binario en los comandos svn import y svn add. Estos comandos harán una buena conjetura y luego (posiblemente) establecerán una propiedad binaria de tipo svn: mime en el archivo que se agrega. (Si Subversion adivina mal, el usuario siempre puede eliminar o editar manualmente la propiedad.)
La edición manual se haría por
svn propset svn:mime-type some/type filename.extension
Básicamente, tienes que establecer el tipo mime en octet-stream:
svn propset svn:mime-type application/octet-stream <filename>
Si 'svn add' adivina 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
luego, la solución es agregar el archivo sin propiedades y luego establecer 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
Por ejemplo:
svn propset svn:mime-type image/png foo.png
Aunque Subversion intenta detectar automáticamente si un archivo es binario o no, puede anular el tipo mime usando 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. Consulte también el manual svn sobre Portabilidad de archivos .
Si usa tortoise svn en Windows, haga clic derecho en el archivo y vaya a Propiedades. Haga clic en Nuevo y agregue una nueva propiedad de tipo svn: mime-type. Para el valor puesto: application/octet-stream
De acuerdo con Subversion FAQ , puede usar svn propset para cambiar el svn: mime-type propiedad a application/octet-stream
svn busca una propiedad de tipo mime, adivinando que es texto si no existe. Puede establecer explícitamente esta propiedad, consulte http://svnbook.red-bean.com/en/1.5/svn.forcvs.binary-and-trans.html
Por lo general, lo hace de forma predeterminada por usted, pero si no es así, debe examinar las propiedades de los archivos y el conjunto de propiedades.