如何让Git显示我的.sql文件的更改?

时间:2015-07-21 13:19:20

标签: git github

我尝试将此添加到.gitattributes:

* text=auto
*.sql diff

但它仍然显示如下:

BIN  WebRole/Sql/Objects/dbo.Content.Table.sql →
WebRole/Sql/dbo.Content.Table.sql Binary file not shown

非常感谢这方面的帮助。

4 个答案:

答案 0 :(得分:7)

GitHub可以很好地决定它如何管理它的差异(例如,他们有3D renderingsmapsimages的自定义差异。

GitHub support将能够确切地说出.sql文件的处理方式和差异。

但是还要检查GitHub仓库中sql文件的编码 正如我在“Why does git think my cs file is binary?”中提到的,UTF-16文件可能存在问题 确保至少sql文件是UTF-8。

答案 1 :(得分:6)

Git通常通过检查内容的开头来正确猜测blob是否包含文本或二进制数据。然而,在你的情况下,git变得混乱并将文件视为二进制文件,可能是由于文件中某处的二进制数据。

来自git-diff手册页:

   -a, --text
       Treat all files as text.

所以你仍然可以很容易地得到文本差异,如下所示:

git diff -a WebRole/Sql/Objects/dbo.Content.Table.sql

要覆盖git不正确的猜测,请将以下内容添加到与文件相同的目录中的.gitattributes:

  

* .sql diff

并提交此文件。这将强制git从现在开始将每个.sql文件视为文本,不管它是否包含二进制数据。

答案 2 :(得分:2)

我发现起作用的唯一方法是将.sql文件的编码从默认的UTF16编码更改为UTF8。下面根据您的情况概述了三种方法:

用于少量文件

  1. 在Visual Studio或SSMS中,选择另存为
  2. 选择“保存”按钮旁边的下拉箭头 enter image description here
  3. 选择“保存编码...”
  4. 在“确认另存为”对话框中选择“是”

enter image description here

  1. 从出现的对话框中选择Unicode(带签名的UTF-8)-CodePage 65001,然后按OK。请注意,UTF-8选项通常位于当前所选编码(Unicode-Codepage 1200)上方

enter image description here

用于大量文件

如果要更改的文件很多,并且对运行Powershell脚本感到满意,则可以尝试以下操作:

  1. 从此link下载由Microsoft MCC MVP Stefan Roth创建的powershell脚本
  2. powershell脚本未进行数字签名,因此您将需要以管理员身份打开powershell,然后降级here概述的执行策略(临时)。选择绕过或不受限制的策略。
  3. 如何运行Powershell脚本详细here。脚本的路径将在其周围加上引号。然后,该脚本需要源文件夹和目标文件夹,且该文件夹不能用引号引起来。请求的编码只是utf8。

对于将来创建的任何文件

为了避免将来需要转换文件,您可以使用此link

中概述的方法来更改在SSMS中创建的新查询的模板。

答案 3 :(得分:1)

它看起来像文件编码问题,你使用什么编码?

比照关注SO问题:Why does Git treat this text file as a binary file?Can I make git recognize a UTF-16 file as text?

你可以强制你的本地git允许文件上的文本差异,但不允许GitHub。

检查您的编码并用UTF-8替换您的文件以解决问题。