Как я могу сделать Git показать изменения в моих .sql файлах?

Я попытался добавить это в .gitattributes:

* text=auto
*.sql diff

Но он все еще выглядит следующим образом:

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

Поблагодарите за помощь в этом.

Ответы

Ответ 1

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

Из git -diff manpage:

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

Таким образом, вы все равно можете легко получить текст diff следующим образом:

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

Чтобы переопределить git неверное предположение, добавьте следующее в .gitattributes в том же каталоге, что и файл:

*. sql diff

и зафиксировать этот файл. Это заставит git обрабатывать каждый .sql файл как текст с этого момента, или содержать двоичные данные.

Ответ 2

GitHub может очень хорошо решить, как он управляет своим diff (например, у них есть пользовательские отличия для 3D-рендеринга, maps или изображения).

Поддержка GitHub сможет точно сказать, как обрабатываются и различаются файлы .sql.

Но проверьте также кодировку ваших файлов sql в репозитории GitHub.
Как я упоминал в "Почему git считает мой файл cs двоичным?, файлы UTF-16 могут быть проблематичными.
Убедитесь, что, как минимум, файлы sql находятся в UTF-8.

Ответ 3

Похоже на проблему с кодировкой файлов, какую кодировку вы используете?

ср. следующие вопросы SO: Почему Git обрабатывает этот текстовый файл как двоичный файл? и Могу ли я сделать Git распознать файл UTF-16 в виде текста?.

Вы можете заставить локальный Git разрешить текстовые различия в файле, но не GitHub.

Проверьте свою кодировку и замените файл UTF-8, чтобы исправить ситуацию.

Ответ 4

Единственный способ, который я нашел, - это изменить кодировку файлов .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. Загрузите скрипт powershell, созданный Microsoft MCC, MVP Stefan Roth по этой ссылке
  2. Сценарий powershell не имеет цифровой подписи, поэтому вам нужно будет открыть powershell от имени администратора, а затем понизить политику выполнения (временно), изложенную здесь. Выберите либо обход, либо неограниченную политику.
  3. Как запустить сценарии powershell подробно описано здесь. Путь к сценарию должен заключаться в кавычки. Затем сценарию требуются папки источника и назначения, которые не должны быть заключены в кавычки. Запрошенная кодировка просто utf8.

Для любых будущих файлов, созданных

Во избежание необходимости конвертировать файлы в будущем вы можете изменить шаблон для новых запросов, созданных в SSMS, используя подход, описанный в этой ссылке.