为什么git认为我的.sql文件是二进制文件?

Ala*_*an2 65 git github

我有一些.sql文件,我只是第一次推送到github.但是当我查看提交时它会说:

BIN ????? WebRole/Sql/Database.sql View
Binary file not shown
Run Code Online (Sandbox Code Playgroud)

有人能告诉我它为什么说"二进制文件没有显示"

Von*_*onC 78

单独的扩展名不足以让GitHub查看它是否是文本文件.
所以它必须看看它的内容.

正如" 为什么Git将此文本文件视为二进制文件? "中所述,其内容可能不包含足够的ascii字符来猜测它是文本文件.

您可以使用.gitattributes文件显式指定.sql应该是文本,而不是二进制文件.

*.sql diff
Run Code Online (Sandbox Code Playgroud)

更新2018:正如我在" Utf-8编码不能处理utf-8编码文档 "中提到的那样,Git 2.18 .gitattributes有一个新working-tree-encoding属性.
所以,如Rusi回答所示:

*.sql text working-tree-encoding=UTF-16LE eol=CRLF
Run Code Online (Sandbox Code Playgroud)

正如kostix评论中补充道:

如果这些文件是由Microsoft SQL Management Studio生成的(或者您正在使用的MS SQL Server管理工具版本中调用的那些文件),则它保存的文件将以UCS-2(或UTF-16)编码 - a双字节编码,这确实不是Git眼中的文字

你可以在" Git说" Binary files a… and b… differ"on for *.regfiles "中看到一个例子

如" 在git中将文件设置为非二进制 "中所述:

"为什么Git将我的文件标记为二进制文件?" 答案是因为它在文件的前8000个字符内的某处看到了NUL(0)字节.
通常,这是因为文件被保存为UTF-8以外的其他内容.因此,它可能被保存为UCS-2,UCS-4,UTF-16或UTF-32.所有这些都在使用ASCII字符时嵌入了NUL字符


正如Neo 在评论中提到的那样(为什么Git将此文本文件视为二进制文件?):

您可以通过从"文件"菜单中的"高级保存选项"菜单项中选择编码"带签名的UTF-8",将SSMS中已保存文件的编码更改为UTF-8.

  • 您可以通过从"文件"菜单中的"高级保存选项"菜单项中选择编码"带签名的UTF-8",将SSMS中已保存文件的编码更改为UTF-8.资料来源:http://stackoverflow.com/a/21170043/197591 (14认同)
  • @Alan,如果这些文件是由Microsoft SQL Management Studio生成的(或者在您使用的MS SQL Server管理工具版本中调用的那些文件),它保存的文件将以UCS-2(或UTF-16)编码 - 一个双字节编码,这确实不是Git眼中的文本. (13认同)
  • 另一个巧妙的技巧,如果你在Windows中运行Git Bash并且不想覆盖你对文件所做的任何更改,只需输入"dos2unix*.sql".这将把所有UCS2文件转换为UTF8,允许git识别文本. (6认同)
  • @Neo好点.我已将您的评论包含在答案中以获得更多可见性. (2认同)

Rus*_*usi 10

这个老问题有了新答案——working-tree-encoding正是由于这些原因,git 最近增加了一个选项。请参阅gitattributes文档 [确保您的手册页匹配,因为这是相当新的!]

找出 sql 文件的编码,例如 file

如果(比如说)它的 utf-16 在 Windows 机器上没有 bom 然后添加到你的 gitattributes 文件

*.sql text working-tree-encoding=UTF-16LE eol=CRLF
Run Code Online (Sandbox Code Playgroud)

如果 utf-16 little endinan (with bom) make it

*.sql text working-tree-encoding=UTF-16 eol=CRLF
Run Code Online (Sandbox Code Playgroud)


Car*_*arl 6

使用链接问题的可接受答案和其他一些意见,我提出了此解决方案,该问题正在运行并且可以在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)
}
Run Code Online (Sandbox Code Playgroud)

  • 有趣的。我明白了,使用 Powershell。+1 (2认同)

Res*_*rce 5

对于那些在 2008 R2 的 SSMS 中遇到此问题的用户(是的,仍然如此!),您可以按如下方式设置默认编码:

  • 找到目录 C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\SqlWorkbenchProjectItems\Sql

地点可能有所不同。这是 Windows 7 64 位上默认安装使用的目录。

  • 在此位置中,添加(或编辑)空 SQL 文件 SQLFile.sql。

这用作新 .SQL 文件的模板。使用您需要的编码保存它(在我的例子中,使用 Windows 行结尾的 Windows-1252)。“保存”按钮右侧的箭头让您可以选择编码。

您需要与开发团队协调编码以避免 git 和 SSMS 麻烦。

  • 我在``C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\SqlWorkbenchProjectItems\Sql``中找到了 SSMS 2012 的此文件 (2认同)

ili*_*ode 5

这是一个对我有用的快速解决方法,使用 SSMS 2012。在工具 => 选项 => 环境 => 国际设置下,如果您将语言从“英语”更改为“与 Microsoft Windows 相同”(它可能会提示您重新启动) SSMS 以使更改生效),它将不再使用 UTF-16 作为新文件的默认编码 - 我创建的所有文件现在都有代码页 1252(文件 => 高级保存选项),这是一个 8 位编码方案似乎没有任何问题Git Diff


归档时间:

查看次数:

23120 次

最近记录:

6 年,8 月 前