Как я могу сказать TortoiseHg отображать файл UTF-16 как недвоичный? - PullRequest
13 голосов
/ 04 июля 2011

В проекте Microsoft Access 2007 объекты формы Access экспортируются в файлы с помощью специального программного обеспечения с помощью встроенной функции «SaveAsText».Это необходимо, потому что Access не хранит какие-либо свои модули кода в отдельных файлах самостоятельно.

Файл начинается с байтов "FF FE" (что соответствует UTF-16 в соответствии с http://de.wikipedia.org/wiki/Byte_Order_Mark). Я полагаю, что из-за того, что в этом файле много символов NUL, Hg рассматривает этот файл как двоичный файл, поэтому на панели diff в рабочей среде TortoiseHG всегда указывается

Файл или различия не отображаются: Файл является двоичным.

, что вполне понятно при таком предположении. Но, тем не менее, этот файл является просто обычным исходным кодом. Я могу просмотреть его, например, в блокноте Windows без проблем.

Есть ли какие-либоспособ сказать Mercurial, что этот конкретный файл должен рассматриваться как текст, а не как двоичный файл?

Редактировать: В дополнение к отмеченному предпочтительному ответу ниже я решил не изменять поведение сохранения, аиспользуйте вместо этого команду «Visual Diff» (выберите файл, затем нажмите Ctrl + d).

Ответы [ 3 ]

5 голосов
/ 05 июля 2011

Я предполагаю, что вы часто или время от времени экспортируете объекты формы для отслеживания изменений исходного кода.

Единственный способ убедить Mercurial в том, что файл не является двоичным, состоит в том, чтобы избежать байтов NUL.

Возможно, вы захотите преобразовать файлы исходного кода в кодировку ASCII (или, возможно, ANSI) в качестве дополнительного шага при экспорте, чтобы избежать байтов NUL. Если файлы исходного кода содержат символы Unicode, вы можете попробовать UTF-8, так как при этом будут выполняться только многобайтовые символы, когда это необходимо, и однобайтовые символы в противном случае, что позволит избежать повторения байтов NUL. Я попробовал это вкратце, и Mercurial обрабатывает UTF-8: он показывает не «Файл является двоичным», а фактический diff. Я зафиксировал в командной строке, но просмотрел diff в TortoiseHg. У меня есть ссылка о проблемах кодирования командной строки ниже.

Секции кодирования / декодирования hgrc могут быть особенно полезны при фильтрации файлов UTF-16 во что-то, что работает лучше.

Пара других страниц по Mercurial и кодировке:

TortoiseHg 2.1 + Mercurial 1.9

3 голосов
/ 04 июля 2011

Из https://www.mercurial -scm.org / wiki / BinaryFiles :

Естественно возникает вопрос, что же такое бинарный файл?Оказывается, на этот вопрос нет действительно хорошего ответа, поэтому Mercurial использует ту же эвристику, что и программы, подобные diff (1).Тест заключается просто в том, что в файле есть какие-либо байты NUL.

Для diff, export и annotate это почти всегда работает правильно и не пытается обрабатывать файлы, которые он считает двоичными., При необходимости вы можете заставить эти команды обрабатывать файлы как текст с помощью -a.

1 голос
/ 09 ноября 2018

В то время, когда был задан вопрос, его не было, но теперь есть проект msaccess-vcs-интеграции , который экспортирует / импортирует объекты MS Access, чтобы их можно было контролировать по версии.

Цитата из файла readme :

Кодирование

Для объектов доступа, которые обычно экспортируются в UCS-2-little-endian кодировка, включенный модуль автоматически преобразовывает в исходный код в кодировку UTF-8 и обратно во время экспорт Импорт; это для того, чтобы у вас не было проблем ветвление, слияние и сравнение в таких инструментах, как Mercurial, которые обрабатывать любой файл, содержащий 0x00 байт, как недифференцируемый двоичный файл файл .

Если вы экспортируете свои формы и модули с этим, вместо того, чтобы напрямую использовать функцию SaveAsText в Access, Mercurial будет не обрабатывать файлы как двоичные.

...