Почему Mercurial считает мои файлы SQL двоичными? - PullRequest
47 голосов
/ 02 марта 2010

Я только что написал сценарии для своих хранимых процедур SQL Server, определений таблиц и т. Д. С помощью SQL Server Management Studio и попытался добавить их в мой репозиторий Mercurial. Они были добавлены просто отлично, но теперь, когда я их изменяю и изменяю, Mercurial называет их «двоичными файлами» и не дает мне должного унифицированного diff.

Я думал, что кодирование может быть проблемой, поэтому я попытался восстановить сценарии и указать ANSI для вывода текстового файла, но у меня такое же поведение. Я могу просматривать их в блокноте без каких-либо странных символов. Почему Mercurial считает эти файлы двоичными?

В противном случае, если кто-то может порекомендовать хороший инструмент для создания сценариев базы данных SQL Server, который может не вызывать эту проблему, он также может работать.

Ответы [ 6 ]

38 голосов
/ 03 марта 2010

Я столкнулся с этой проблемой, потому что SQL Server Management Studio сохраняет файлы как Unicode. Первые два байта (большую часть времени) текстового файла Unicode определяют кодировку. Большинство новых текстовых редакторов (например, Блокнот) обрабатывают это прозрачно.

Первые два байта, вероятно, там, где ваша проблема. Они могут выглядеть как ÿþ. Или FF FE в шестнадцатеричном формате.

На кнопке «Сохранить» в диалоговом окне «Сохранить» находится список выбора. Выберите «Сохранить с кодировкой ...» и выберите «US-ASCII-Codepage20127». Я считаю, что этот параметр является липким и останется для будущих сохранений.

4 голосов
/ 02 марта 2010

Согласно документам считается двоичным, если в файле есть нулевые байты. В файлах SQL не должно быть нулевых байтов, поэтому я бы сначала проверил это (попробуйте поискать в шестнадцатеричном редакторе). Я полагаю, вы знаете, что можете заставить diff воспринимать его как текст

3 голосов
/ 02 марта 2010

Андрей прав; это где-то NUL-байт (я думаю, что это будет Порядок следования байтов в начале, вставленный грубым редактором). Не беспокойтесь об этом, в отличие от SVN или CVS, Mercurial совсем не обрабатывает двоичные и текстовые файлы. отображает их по-разному, когда вы делаете 'hg log', но они по-разному не обрабатываются.

Предстоящие выпуски Mercurial выпускают специальные спецификации для случая и не позволяют им запускать поведение «пользователь, вероятно, не хочет видеть различия этого на консоли».

1 голос
/ 03 марта 2010

Я столкнулся с этим при редактировании файла хранимых процедур из SQL Server в Linux и использовании git. Git подумал, что это двоичный файл, потому что файл с SQL Server был UTF-16 и, следовательно, содержал NUL. Мое исправление для этого было emacs, который позволяет вам изменить кодировку на UTF-8.

0 голосов
/ 22 июня 2012

У меня была похожая проблема, и я решил использовать инструмент, найденный в http://www.devio.at/index.php/smoscript, чтобы помочь мне решить проблему. Я написал сценарий SMOscript, поместив в файл cmd следующее:

rd /s /q [the scripts folder]
"C:\Program Files\devio IT Services\SMOscript\smoscript.exe" -s [server] -d [database] -F [the scripts folder] -U

Идея состоит в том, чтобы удалить старую папку, чтобы любые объекты, удаленные из базы данных, были удалены из системы контроля версий. Это также сохраняет файлы в формате UTF8 без каких-либо отметок даты / времени, поэтому они отлично работают при управлении версиями.

0 голосов
/ 16 марта 2012

Я знаю, что уже немного поздно, но я придумал скрипт для пакетного сохранения файлов * .sql в UTF-8.

Полный ответ опубликован в другой ветке StackOverflow, поэтому я просто опубликую ссылку здесь - https://stackoverflow.com/a/9743360/336079.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...