我有一些.sql文件,我只是第一次推到github。然而,当我看提交它说:
BIN WebRole/Sql/Database.sql View Binary file not shown
字符串有人能告诉我为什么它说“二进制文件未显示”
mrzz3bfm1#
仅扩展名不足以让GitHub判断它是否是一个文本文件。因此,它必须看它的内容。正如在“Why does Git treat this text file as a binary file?“中提到的,它的内容可能没有包含足够的字符来猜测它是文本文件。您可以使用.gitattributes file显式指定.sql应该是文本,而不是二进制。
.sql
*.sql diff
字符串2018年更新:正如我在“Utf-8 encoding not working on utf-8 encoded document“中提到的,Git 2.18 .gitattributes有一个新的working-tree-encoding属性。因此,如Rusi的answer所示:
working-tree-encoding
*.sql text working-tree-encoding=UTF-16LE eol=CRLF
型正如kostix在评论中所说:如果这些文件是由Microsoft SQL Management Studio(或您正在使用的MS SQL Server管理工具版本中的任何名称)生成的,则它保存的文件将以UCS-2(或UTF-16)编码-一种两字节编码,在Git看来,这确实不是文本你可以在“Git says “ Binary files a… and b… differ ” on for *.reg files”中看到一个例子。如“Set file as non-binary in git“中所述:“为什么Git把我的文件标记为二进制?”答案是因为它在文件的前8000个字符中看到了一个NUL(0)字节。通常情况下,发生这种情况是因为文件保存为UTF-8以外的格式。因此,它可能保存为UCS-2、UCS-4、UTF-16或UTF-32。所有这些格式在使用ASCII字符时都嵌入了NUL字符正如Neo在评论中提到的(以及在Why does Git treat this text file as a binary file?中):您可以通过从“文件”菜单中的“高级保存选项”菜单项中选择编码“带签名的UTF-8”,将SSMS中已保存文件的编码更改为UTF-8。
Binary files a… and b… differ
*.reg
uqcuzwp82#
从2.18版本开始,git就有了一个选项working-tree-encoding,这正是出于这些原因。参见gitattributes文档。[Make确保你的git版本(* 和所有使用repo的人 *)至少是2.18]找出sql文件的编码,例如使用file如果(比如说)它的UTF-16没有bom在windows机器上,然后添加到你的gitattributes文件
file
字符串如果utf-16小endinan(与bom)使它
*.sql text working-tree-encoding=UTF-16 eol=CRLF
型
zengzsys3#
使用链接问题的公认答案和其他一些评论,我想出了这个问题的解决方案,它在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) }
字符串
iaqfqrcu4#
对于那些在SSMS for 2008 R2中遇到此问题的人(是的,仍然是!),您可以设置默认编码如下:
位置可能会有所不同。这是Windows 7 64位上默认安装使用的目录。
这被用作新的.SQL文件的模板。保存它使用您需要的编码(在我的情况下,Windows-1252与Windows行结束符)。“保存”按钮右边的箭头给你一个编码的选择。您需要与开发团队协调编码,以避免git和SSMS的麻烦。
kyks70gy5#
这里有一个快速的解决方法,我使用SSMS 2012。在工具=>选项=>环境=>国际设置下,如果您将语言从“英语”更改为“与Microsoft Windows相同”,(它可能会提示您重新启动SSMS以使更改生效),它将不再使用UTF-16作为新文件的默认编码-我创建的所有 new 文件都具有Codepage 1252(file => advanced保存选项),这是一个8位编码方案,似乎对Git Diff没有问题
Git Diff
rmbxnbpk6#
解决此问题的方法是强制文件使用8位编码。您可以运行此PowerShell脚本来更改当前目录及其子目录中所有.SQL文件的编码。
Get-ChildItem -Recurse *.sql | foreach { $FileName = $_.FullName; [System.Io.File]::ReadAllText($FileName) | Out-File -FilePath $FileName -Encoding UTF8; }
vkc1a9a27#
我使用Microsoft SQL Server Management Studio 19.1 Generate Scripts向导从数据库导出SQL命令,并将生成的.sql文件提交到Github。默认情况下,向导将.sql文件写入Unicode Text。这导致Github认为该文件是二进制格式。在我的例子中,简单的修复方法是将向导中导出的格式更改为ANSI Text,而不是Save as选择中的Unicode Text。现在Github能够将文件识别为纯文本,并在内容上提供diff s。无需PowerShell命令,无需运行后处理文件。只需将文本导出为ANSI,Github就会很高兴。
Generate Scripts
Unicode Text
ANSI Text
Save as
diff
ANSI
的数据
7条答案
按热度按时间mrzz3bfm1#
仅扩展名不足以让GitHub判断它是否是一个文本文件。
因此,它必须看它的内容。
正如在“Why does Git treat this text file as a binary file?“中提到的,它的内容可能没有包含足够的字符来猜测它是文本文件。
您可以使用.gitattributes file显式指定
.sql
应该是文本,而不是二进制。字符串
2018年更新:正如我在“Utf-8 encoding not working on utf-8 encoded document“中提到的,Git 2.18 .gitattributes有一个新的
working-tree-encoding
属性。因此,如Rusi的answer所示:
型
正如kostix在评论中所说:
如果这些文件是由Microsoft SQL Management Studio(或您正在使用的MS SQL Server管理工具版本中的任何名称)生成的,则它保存的文件将以UCS-2(或UTF-16)编码-一种两字节编码,在Git看来,这确实不是文本
你可以在“Git says “
Binary files a… and b… differ
” on for*.reg
files”中看到一个例子。如“Set file as non-binary in git“中所述:
“为什么Git把我的文件标记为二进制?”答案是因为它在文件的前8000个字符中看到了一个NUL(0)字节。
通常情况下,发生这种情况是因为文件保存为UTF-8以外的格式。因此,它可能保存为UCS-2、UCS-4、UTF-16或UTF-32。所有这些格式在使用ASCII字符时都嵌入了NUL字符
正如Neo在评论中提到的(以及在Why does Git treat this text file as a binary file?中):
您可以通过从“文件”菜单中的“高级保存选项”菜单项中选择编码“带签名的UTF-8”,将SSMS中已保存文件的编码更改为UTF-8。
uqcuzwp82#
从2.18版本开始,git就有了一个选项
working-tree-encoding
,这正是出于这些原因。参见gitattributes文档。[Make确保你的git版本(* 和所有使用repo的人 *)至少是2.18]
找出sql文件的编码,例如使用
file
如果(比如说)它的UTF-16没有bom在windows机器上,然后添加到你的gitattributes文件
字符串
如果utf-16小endinan(与bom)使它
型
zengzsys3#
使用链接问题的公认答案和其他一些评论,我想出了这个问题的解决方案,它在Win10上运行并工作
字符串
iaqfqrcu4#
对于那些在SSMS for 2008 R2中遇到此问题的人(是的,仍然是!),您可以设置默认编码如下:
位置可能会有所不同。这是Windows 7 64位上默认安装使用的目录。
这被用作新的.SQL文件的模板。保存它使用您需要的编码(在我的情况下,Windows-1252与Windows行结束符)。“保存”按钮右边的箭头给你一个编码的选择。
您需要与开发团队协调编码,以避免git和SSMS的麻烦。
kyks70gy5#
这里有一个快速的解决方法,我使用SSMS 2012。在工具=>选项=>环境=>国际设置下,如果您将语言从“英语”更改为“与Microsoft Windows相同”,(它可能会提示您重新启动SSMS以使更改生效),它将不再使用UTF-16作为新文件的默认编码-我创建的所有 new 文件都具有Codepage 1252(file => advanced保存选项),这是一个8位编码方案,似乎对
Git Diff
没有问题rmbxnbpk6#
解决此问题的方法是强制文件使用8位编码。您可以运行此PowerShell脚本来更改当前目录及其子目录中所有.SQL文件的编码。
字符串
vkc1a9a27#
我使用Microsoft SQL Server Management Studio 19.1
Generate Scripts
向导从数据库导出SQL命令,并将生成的.sql
文件提交到Github。默认情况下,向导将
.sql
文件写入Unicode Text
。这导致Github认为该文件是二进制格式。在我的例子中,简单的修复方法是将向导中导出的格式更改为
ANSI Text
,而不是Save as
选择中的Unicode Text
。现在Github能够将文件识别为纯文本,并在内容上提供diff
s。无需PowerShell命令,无需运行后处理文件。只需将文本导出为
ANSI
,Github就会很高兴。的数据