Подтвердить что ты не робот

Почему git считает мой .sql файл двоичным файлом?

У меня есть некоторые .sql файлы, которые я только что нажал на github. Однако, когда я смотрю на фиксацию, он говорит:

BIN  WebRole/Sql/Database.sql View
Binary file not shown

Может ли кто-нибудь сказать мне, почему он говорит "Двоичный файл не показан"

4b9b3361

Ответ 1

Одно только расширение недостаточно для Github, чтобы увидеть, является ли это текстовым файлом.
Поэтому он должен смотреть на его содержимое.

И как упоминалось в "Почему Git обрабатывает этот текстовый файл как двоичный файл?, его содержимое может не содержать достаточно символов ascii, чтобы догадаться, что это текстовый файл.

Вы можете использовать . файл gitattributes, чтобы явно указать .sql должен быть текст, а не двоичный.

.sql diff

Поскольку kostix добавляет в комментарии:

если эти файлы создаются с помощью Microsoft SQL Management Studio (или того, что он вызвал в используемой вами версии инструментов управления MS SQL Server), файлы, которые он сохраняет, закодированы в UCS-2 (или UTF-16) - двухбайтовая кодировка, которая действительно не является текстом в глазах Git

Вы можете увидеть пример в Git говорит "Binary files a… and b… differ" для *.reg файлов"

Как упоминалось в "Установить файл как не двоичный в Git":

"Почему Git указывает мой файл как двоичный?" Ответ заключается в том, что он видит NUL (0) байт где-то в пределах первых 8000 символов файла.
Как правило, это происходит потому, что файл сохраняется как нечто иное, чем UTF-8. Таким образом, он, скорее всего, будет сохранен как UCS-2, UCS-4, UTF-16 или UTF-32. Все они имеют встроенные символы NUL при использовании символов ASCII


Как Neo упоминает в комментариях (и в Почему Git обрабатывает этот текстовый файл как двоичный файл?):

Вы можете изменить кодировку сохраненного файла в SSMS на UTF-8, выбрав кодировку "UTF-8 с сигнатурой" из пункта меню "Дополнительные параметры сохранения" в меню "Файл".

Ответ 2

Для тех, кто борется с этой проблемой в SSMS за 2008 R2 (да, все еще!), вы можете установить кодировку по умолчанию следующим образом:

  • Найти каталог C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\SqlWorkbenchProjectItems\Sql

Местоположение может отличаться. Это каталог, используемый установкой по умолчанию для 64-разрядной версии Windows 7.

  • В этом месте добавьте (или отредактируйте) пустой SQL файл SQLFile.sql.

Это используется как шаблон для новых .SQL файлов. Сохраните его, используя требуемую кодировку (в моем случае, Windows-1252 с окончанием строки Windows). Стрелка справа от кнопки "Сохранить" дает вам выбор кодировок.

Вам нужно согласовать кодировки с вашей командой разработчиков, чтобы избежать проблем с git и SSMS.

Ответ 3

Способ решения этой проблемы - заставить файл использовать 8-битную кодировку. Вы можете запустить этот PowerShell script, чтобы изменить кодировку всех .SQL файлов в текущем каталоге и его подкаталогах.

Get-ChildItem -Recurse *.sql | foreach {
  $FileName = $_.FullName;
  [System.Io.File]::ReadAllText($FileName) | Out-File -FilePath $FileName -Encoding UTF8;
}

Ответ 4

Вот краткое обходное решение, которое сработало для меня, используя SSMS 2012. В разделе tools = > options = > environment = > международные настройки, если вы измените язык с "Английский" на "То же, что и на Microsoft Windows" (он может запрашивать вы должны перезапустить SSMS, чтобы изменения вступили в силу), он больше не будет использовать UTF-16 в качестве кодировки по умолчанию для новых файлов - все новые файлы, которые я создаю, теперь имеют Codepage 1252 (файл = > дополнительные параметры сохранения), что составляет 8 битной схемы кодирования и, похоже, не имеет проблем с Git Diff