si estos archivos son generados por Microsoft SQL Management Studio (o como se llame en la versión de las herramientas de administración de MS SQL Server que está usando), los archivos que guarda están codificados en UCS-2 (o UTF-16) - un codificación de dos bytes, que de hecho no es texto a los ojos de Git
"¿Por qué Git marca mi archivo como binario?" La respuesta es porque está viendo un byte NUL (0) en algún lugar dentro de los primeros 8000 caracteres del archivo.
Normalmente, eso sucede porque el archivo se guarda como algo diferente a UTF-8. Por lo tanto, es probable que se guarde como UCS-2, UCS-4, UTF-16 o UTF-32. Todos ellos tienen caracteres NUL incrustados cuando se utilizan caracteres ASCII
Puede cambiar la codificación de un archivo guardado en SSMS a UTF-8 seleccionando la codificación 'UTF-8 con firma' en el elemento de menú 'Opciones avanzadas de guardado' en el menú Archivo.
@Alan, si estos archivos son generados por Microsoft SQL Management Studio (o como se llame en la versión de las herramientas de administración de MS SQL Server que está usando), los archivos que guarda están codificados en UCS-2 (o UTF-16) - una codificación de dos bytes, que de hecho no es texto a los ojos de Git.
kostix
16
Puede cambiar la codificación de un archivo guardado en SSMS a UTF-8 seleccionando la codificación 'UTF-8 con firma' en el elemento de menú 'Opciones avanzadas de guardado' en el menú Archivo. Fuente: stackoverflow.com/a/21170043/197591
Neo
2
@Neo Buen punto. He incluido su comentario en la respuesta para mayor visibilidad.
VonC
7
Otro buen truco, si está ejecutando Git Bash en Windows y no desea sobrescribir ningún cambio que haya realizado en los archivos, es simplemente escribir "dos2unix * .sql". Eso convertirá todos los archivos UCS2 a UTF8, lo que permitirá que git reconozca el texto.
Usando la respuesta aceptada de la pregunta vinculada y algunos otros comentarios, se me ocurrió esto como una solución al problema, que funciona y se ejecuta en Win10
Get-Content necesitaba una bandera en mi caso para lidiar con los corchetes en los nombres de los archivos (como [dbo]):$Contents = Get-Content -LiteralPath $MyPath
Jeremy Murray
7
Esta vieja pregunta tiene una nueva respuesta: git recientemente desarrolló una opción working-tree-encodingprecisamente por estas razones. Consulte los documentos de gitattributes [¡Asegúrese de que su página de manual coincida, ya que esto es bastante nuevo!]
Descubra la codificación del archivo sql, por ejemplo, con file
Si (digamos) su utf-16 sin bom en la máquina de Windows, agregue a su archivo gitattributes
*.sql text working-tree-encoding=UTF-16LE eol=CRLF
Para aquellos que luchan con este problema en SSMS para 2008 R2 (¡sí, aún así!), Puede configurar la codificación predeterminada de la siguiente manera:
Busque el directorio C: \ Archivos de programa (x86) \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \ SqlWorkbenchProjectItems \ Sql
Las ubicaciones pueden variar. Este es el directorio utilizado por la instalación predeterminada en Windows 7 de 64 bits.
En esta ubicación, agregue (o edite) el archivo SQL vacío SQLFile.sql.
Esto se utiliza como plantilla para nuevos archivos .SQL. Guárdelo usando la codificación que necesita (en mi caso, Windows-1252 con finales de línea de Windows). La flecha a la derecha del botón "Guardar" le ofrece una selección de codificaciones.
Necesita coordinar las codificaciones con su equipo de desarrollo para evitar problemas con git y SSMS.
Encontré este archivo para SSMS 2012 enC:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\SqlWorkbenchProjectItems\Sql
Aaron D
1
Y SSMS2016:C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ManagementStudio\SqlWorkbenchProjectItems\Sql
Coxy
4
Aquí hay una solución rápida que funcionó para mí, usando SSMS 2012. En herramientas => opciones => entorno => configuración internacional, si cambia el idioma de "Inglés" a "Igual que Microsoft Windows" (es posible que le pida que reinicie SSMS para que los cambios surtan efecto), ya no usará UTF-16 como la codificación predeterminada para archivos nuevos; todos los archivos nuevos que creo tienen la página de códigos 1252 (archivo => opciones avanzadas de guardado) ahora, que es un esquema de codificación de 8 bits y parece no tener problemas conGit Diff
La forma de resolver este problema es forzar al archivo a utilizar la codificación de 8 bits. Puede ejecutar este script de PowerShell para cambiar la codificación de todos los archivos .SQL en el directorio actual y sus subdirectorios.
Respuestas:
La extensión por sí sola no es suficiente para que GitHub vea si es un archivo de texto.
Entonces tiene que mirar su contenido.
Y como se menciona en " ¿Por qué Git trata este archivo de texto como un archivo binario? ", Su contenido puede no incluir suficientes caracteres ascii para adivinar que es un archivo de texto.
Puede usar un archivo .gitattributes para especificar explícitamente que
.sql
debe ser un texto, no un binario.Actualización 2018: como menciono en " La codificación Utf-8 no funciona en un documento codificado en utf-8 ", Git 2.18 .gitattributes tiene un nuevo
working-tree-encoding
atributo.Entonces, como se muestra en la respuesta de Rusi :
Como agrega kostix en los comentarios :
Puedes ver un ejemplo en " Git dice"
Binary files a… and b… differ
"activado para*.reg
archivos "Como se menciona en " Establecer archivo como no binario en git ":
Como Neo menciona en los comentarios (y en ¿Por qué Git trata este archivo de texto como un archivo binario? ):
fuente
iso
' de ese comando dos2unix para ver si eso ayuda: computerhope.com/unix/dos2unix.htmUsando la respuesta aceptada de la pregunta vinculada y algunos otros comentarios, se me ocurrió esto como una solución al problema, que funciona y se ejecuta en Win10
fuente
$Contents = Get-Content -LiteralPath $MyPath
Esta vieja pregunta tiene una nueva respuesta: git recientemente desarrolló una opción
working-tree-encoding
precisamente por estas razones. Consulte los documentos de gitattributes [¡Asegúrese de que su página de manual coincida, ya que esto es bastante nuevo!]Descubra la codificación del archivo sql, por ejemplo, con
file
Si (digamos) su utf-16 sin bom en la máquina de Windows, agregue a su archivo gitattributes
Si utf-16 little endinan (con bom) hazlo
fuente
Para aquellos que luchan con este problema en SSMS para 2008 R2 (¡sí, aún así!), Puede configurar la codificación predeterminada de la siguiente manera:
Las ubicaciones pueden variar. Este es el directorio utilizado por la instalación predeterminada en Windows 7 de 64 bits.
Esto se utiliza como plantilla para nuevos archivos .SQL. Guárdelo usando la codificación que necesita (en mi caso, Windows-1252 con finales de línea de Windows). La flecha a la derecha del botón "Guardar" le ofrece una selección de codificaciones.
Necesita coordinar las codificaciones con su equipo de desarrollo para evitar problemas con git y SSMS.
fuente
C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\SqlWorkbenchProjectItems\Sql
C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ManagementStudio\SqlWorkbenchProjectItems\Sql
Aquí hay una solución rápida que funcionó para mí, usando SSMS 2012. En herramientas => opciones => entorno => configuración internacional, si cambia el idioma de "Inglés" a "Igual que Microsoft Windows" (es posible que le pida que reinicie SSMS para que los cambios surtan efecto), ya no usará UTF-16 como la codificación predeterminada para archivos nuevos; todos los archivos nuevos que creo tienen la página de códigos 1252 (archivo => opciones avanzadas de guardado) ahora, que es un esquema de codificación de 8 bits y parece no tener problemas con
Git Diff
fuente
La forma de resolver este problema es forzar al archivo a utilizar la codificación de 8 bits. Puede ejecutar este script de PowerShell para cambiar la codificación de todos los archivos .SQL en el directorio actual y sus subdirectorios.
fuente
[System.IO.File]::WriteAllLines($MyPath, $MyFile, $Utf8NoBomEncoding)