2011-04-21 11 views
24

Alguien ha agregado recientemente un script de PowerShell (.ps1) a nuestro repositorio de Mercurial. El archivo es texto plano, pero TortoiseHg parece pensar que es binario y muestra un mensaje: "Archivo o diffs no se muestran: el archivo es binario".¿Cómo le digo a TortoiseHg que un archivo no es binario?

Cómo le digo a TortoiseHg que los archivos ps1 son texto y no binarios. Estoy usando la versión TortoiseHg 2.0.3

+3

Me gustaría ver una respuesta para esto que no dependa de cambiar la codificación del archivo. Rastreamos un archivo de proyecto que para una herramienta comercial no podemos cambiar y guarda los archivos en UCS-2; TortoiseHg afirma que estos archivos son binarios y elige no mostrar la diferencia. –

+0

@ChrisPhillips: si puede encontrar la herramienta de escritura para la recodificación desatendida de archivos, puede (intentar) usar [codificar | trucos de decodificación] (http://www.selenic.com/mercurial/hgrc.5.html#decode -encode) para estos archivos –

Respuesta

28

Los archivos están codificados en codificación UCS-2 y utilicé Notepad ++ para convertirlo a UTF-8.

Ahora que está hecho, mercurial parece reconocer el archivo como texto y realiza un diff correctamente.

¡Es hora de que read esto otra vez!

Puede valer la pena mirar this, también como UCS-2 parece estrechamente relacionado con UTF-16. De acuerdo con ese enlace, lo supera, pero el esfuerzo de mover Windows a UTF-16 de UCS-2 ha estado en curso desde antes de 2000.

1

El uso del bloc de notas ++ ayuda a convertir la codificación UCS-2 al UTF-8.

Sin embargo, cuando lo uso, por ejemplo, para convertir el archivo XML (Estudio csproj Visual), no se olvide de cambiar la codificación XML de UTF-16 a UTF-8, como:

<?xml version="1.0" encoding="utf-8"?> 
5

Perdón por responder a una publicación que es tan antigua, pero para fines históricos, algunos comentarios están en orden.

En primer lugar, el repositorio de código subyacente (mercurial) trata todos los archivos como binarios en lo que respecta a las revisiones. Todo lo que estás perdiendo aquí es la capacidad de ver las diferencias, las diferencias físicas aún se rastrean, y la naturaleza de esos cambios no es más grande en virtud del hecho de que Tortuga no puede mostrarlos. (Los archivos binarios JPEG, por el contrario, tienen grandes diferencias binarias incluso para pequeños cambios de píxeles; mientras que estos archivos tendrán diferencias relativamente pequeñas)

En segundo lugar, aunque Tortoise no puede mostrar las diferencias, kdiff3 puede si configura su archivo mercurial.ini apropiadamente. En su directorio de inicio, es probable que tenga un archivo mercurial.ini, aunque solo sea para registrar su nombre de usuario. Si lo expandes para incluir patrones de fusión. Mire aquí patrones de combinación: http://www.selenic.com/mercurial/hgrc.5.html.

Ahí, verá cómo decirle a mercurial que las diferencias en estos archivos se deben mostrar con kdiff3, aunque mercurial cree que son binarias. Tortoise aún no mostrará las diferencias en el banco de trabajo, pero puede hacer clic con el botón derecho en el archivo y mostrar las diferencias al padre, y verá las diferencias muy bien. No es perfecto, pero es mejor que nada.

Cuestiones relacionadas