Tengo algunos archivos .sql que envié por primera vez a github. Sin embargo, cuando miro el compromiso, dice:
BIN WebRole/Sql/Database.sql View
Binary file not shown
¿Alguien puede decirme por qué dice "No se muestra el archivo binario"?
Tengo algunos archivos .sql que envié por primera vez a github. Sin embargo, cuando miro el compromiso, dice:
BIN WebRole/Sql/Database.sql View
Binary file not shown
¿Alguien puede decirme por qué dice "No se muestra el archivo binario"?
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.
*.sql diff
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 :
*.sql text working-tree-encoding=UTF-16LE eol=CRLF
Como agrega kostix en los comentarios :
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
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 ":
"¿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
Como Neo menciona en los comentarios (y en ¿Por qué Git trata este archivo de texto como un archivo binario? ):
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.
iso
' de ese comando dos2unix para ver si eso ayuda: computerhope.com/unix/dos2unix.htm
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
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
Get-ChildItem -Recurse *.sql | foreach {
$MyPath = $_.FullName;
$Contents = Get-Content $MyPath
[System.IO.File]::WriteAllLines($MyPath, $Contents, $Utf8NoBomEncoding)
}
$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
*.sql text working-tree-encoding=UTF-16LE eol=CRLF
Si utf-16 little endinan (con bom) hazlo
*.sql text working-tree-encoding=UTF-16 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:
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.
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 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.
Get-ChildItem -Recurse *.sql | foreach {
$FileName = $_.FullName;
[System.Io.File]::ReadAllText($FileName) | Out-File -FilePath $FileName -Encoding UTF8;
}
[System.IO.File]::WriteAllLines($MyPath, $MyFile, $Utf8NoBomEncoding)