Git говорит: «Двоичные файлы a ... и b ... отличаются» для * .reg файлов - PullRequest
12 голосов
/ 18 февраля 2011

Есть ли способ заставить Git рассматривать .reg файлы как текст?Я использую Git для отслеживания настроек реестра Windows, и Windows использует .reg для этих файлов.

ОБНОВЛЕНИЕ 1: Я получил его для запуска diff (спасибо, Эндрю).Однако теперь это выглядит так ниже.Это проблема с кодировкой?

index 0080fe3..fc51807 100644
--- a/Install On Rebuild/4. Registry Tweaks.reg
+++ b/Install On Rebuild/4. Registry Tweaks.reg
@@ -1,49 +1,48 @@
-<FF><FE>W^@i^@n^@d^@o^@w^@s^@ ^@R^@e^@g^@i^@s^@t^@r^@y^@ ^@E^@d^@i^@t^@o^@r^@
-^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;
-^@^M^@
...

Есть идеи?

ОБНОВЛЕНИЕ 2: Спасибо всем, кто помог: вот что я сделал в конце: создать файл .gitattributes с содержимым *.reg text diff, а затем я конвертировал файлы в UTF-8, так как UTF-16 странно с diff.Я не использую никаких иностранных символов, так что UTF-8 работает для меня.

Ответы [ 4 ]

9 голосов
/ 18 февраля 2011

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

*.reg diff
4 голосов
/ 19 февраля 2011

Git рассматривает ваши файлы экспорта реестра как двоичные файлы, потому что они имеют NUL. Нет хорошего способа сравнения или объединения general бинарных файлов. Изменение одного байта может изменить интерпретацию остальной части файла.

Существует два основных подхода к обработке двоичных файлов:

  1. Примите, что они двоичные. Различия не будут значимыми, поэтому не просите их. Никогда не объединяйте их, что означает разрешать изменения только в одной ветке. В этом случае это можно упростить, поместив каждый твик (или набор связанных твиков в отдельный файл), поэтому в одном файле будет меньше возможных различий.

  2. Сохранение изменений в виде текста и преобразование / деконвертация в эти двоичные формы.

Несмотря на то, что эти «текстовые» файлы, кодировка UTF-16 содержит NUL. Однако, похоже, что нет битов, отличных от ASCII. Можете ли вы преобразовать их в ASCII (или UTF-8, который будет ASCII, если нет расширенных символов)?

2 голосов
/ 12 февраля 2014

Создать один utf16toascii.py :

#!/usr/bin/env python3
import sys
data = open(sys.argv[-1]).read()
ascii = data.decode('utf-16').encode('ascii', 'replace')
sys.stdout.write(ascii)

Затем в Bash сделать:

$ echo "*.reg diff=utf16strings" >> .gitattributes
$ git config --global diff.utf16strings.textconv /path/to/utf16toascii.py

И вы можете использовать файлы реестра, файлы Xcode .strings или любые другие файлы utf-16.

2 голосов
/ 26 февраля 2013

Преобразуйте файлы .reg из utf16 в utf8, открыв каждый файл .reg в блокноте и сохранив его в виде кодировки UTF-8.

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