git difftool: как сравнивать zip-файлы

Я пытаюсь сравнить двоичный файл с помощью «git difftool». Этот файл тоже постановочный, но, похоже, это не важно. Итак, я использую что-то вроде ниже:

git difftool --staged /path/to/file

и мой .gitconfig настроен так:

[difftool "bc3"]
    path = C:/Program Files (x86)/Beyond Compare 3/BComp.com
    cmd = BComp.com \"$LOCAL\" \"$REMOTE\" -lefttitle="Remote" -righttitle="$BASE" -lro
[diff]
    tool = bc3
[difftool]
    prompt = false

Поэтому, когда я запускаю git difftool, он открывает Beyond Compare, как и ожидалось, но я получаю сообщение об ошибке, что базовый двоичный файл не существует. Измененная локальная копия корректно загружается в инструмент.

Я заметил это с *.bcpkg (файл настроек Beyond Compare, в основном zip-файл), а также с обычными файлами *.zip. Но, кажется, отлично работает с файлами *.exe. Я заметил, что git difftool не должен возвращаться, если Beyond Compare не закрыт, потому что, если он возвращает созданный им временный файл, он удаляется. Но в случае zip-файла он всегда возвращается немедленно.

Кстати, diff для всех других типов файлов у меня работает нормально. У меня Windows 7 (64-разрядная версия) и, как вы видите, я настроил Beyond Compare 3.


person Waqas Ilyas    schedule 10.08.2016    source источник
comment
Насколько я понимаю, Git плохо обрабатывает различия в двоичных файлах. По этой причине многие не используют Git для управления версиями двоичных файлов. Я не вижу ничего неожиданного в вашем вопросе.   -  person Tim Biegeleisen    schedule 10.08.2016
comment
Это разочаровывает ... могу ли я извлечь базовый файл и промежуточные файлы за пределы репо, чтобы вручную сравнить их с помощью моего инструмента?   -  person Waqas Ilyas    schedule 10.08.2016
comment
Если базовые файлы представляют собой обычный текст, исходный код и т. д., а не двоичные файлы, то да, это должно работать.   -  person Tim Biegeleisen    schedule 10.08.2016
comment
Чтобы было ясно, вы говорите, что если бы файл был текстовым, я мог бы извлечь базовый файл (файл, соответствующий последнему состоянию фиксации) и/или файл в промежуточной области, где-то за пределами репо. И сравните их любым способом. Но тот же механизм не работает для бинарных файлов?   -  person Waqas Ilyas    schedule 10.08.2016
comment
@TimBiegeleisen верно, что Git плохо обрабатывает двоичные различия, но OP настраивает внешний инструмент для обработки этих различий, и это нормально.   -  person 1615903    schedule 10.08.2016
comment
@ 1615903 Вы уверены, что внешний инструмент сравнения работает лучше, чем Git?   -  person Tim Biegeleisen    schedule 10.08.2016
comment
@TimBiegeleisen да, вне всякого сравнения, он может хорошо обрабатывать многие двоичные файлы, включая zip-файлы.   -  person 1615903    schedule 10.08.2016
comment
@TimBiegeleisen Я думаю, очевидно, что у внешнего инструмента больше шансов на это, поскольку Git явно не может хорошо обрабатывать двоичные файлы, как вы только что предложили.   -  person Waqas Ilyas    schedule 10.08.2016


Ответы (2)


Это исправлено в Beyond Compare 4. Beyond Compare 4 поддерживает отличие zip-файлов от git.

Beyond Compare 3 не поддерживает отличие zip-файлов от git. Это завершится ошибкой с сообщением об ошибке: Папка недоступна: C:\Users\username\AppData\Local\Temp\42Ycl9_filename.zip

Если вы хотите оценить Beyond Compare 4 для проверки различий zip-файлов, запустите программу установки и выберите Создать портативную установку и установите в папку на рабочем столе. Это не требует прав администратора. Затем запустите git config --global difftool.bc3.path "c:/users/username/desktop/Beyond Compare 4/bcomp.exe", чтобы git использовал переносную установку. После завершения тестирования просто удалите папку на рабочем столе, чтобы удалить портативную установку версии 4.

Чтобы обновить лицензию после пробной версии 4, заполните форму обновления. на веб-сайте Scooter Software.

person Chris Kennedy    schedule 11.08.2016
comment
Это неправильно... Я могу отлично сравнивать zip-файлы с TortoiseSVN, где я таким же образом подключил Beyond Compare. Более того, если вы посмотрите внимательно, я использую BComp.com, а не BComp.exe, который не возвращается, пока не будет закрыта вкладка сравнения. Это верно даже для тех случаев, когда у Beyond Compare уже есть запущенный экземпляр. - person Waqas Ilyas; 12.08.2016
comment
Только что понял, что вы сотрудник Scooter Software, так что, скорее всего, я ошибаюсь :p - person Waqas Ilyas; 12.08.2016
comment
Я говорил с коллегой об этой проблеме, возможно, поведение изменилось с BC3 на BC4. Я проведу небольшое расследование сегодня и обновлю свой пост. - person Chris Kennedy; 12.08.2016
comment
Я отредактировал свой ответ. git difftool для zip-файлов поддерживается в Beyond Compare 4. Beyond Compare 3 не поддерживает сравнение zip-файлов с git. - person Chris Kennedy; 12.08.2016
comment
Ну вот и все, попытка с BC4 сработала. Большое спасибо. Любые обходные пути для BC3? - person Waqas Ilyas; 12.08.2016
comment
Для BC3 нет хорошего обходного пути. Если вы используете версию 3, вам придется проверить две версии zip-файла во временных папках, а затем запустить сравнение вне git. - person Chris Kennedy; 15.08.2016

FWIW, эта статья показывает как вы можете настроить git для распаковки файлов с выбранными расширениями, прежде чем ваш стандартный diff будет запущен на нем. Может быть, это помогает.

person Fab    schedule 12.01.2017
comment
Меня интересует, имеет ли этот метод практическое применение. Я предполагаю, что этого будет достаточно для простых случаев, но zip-файл, содержащий много файлов, будет чрезвычайно сложно отличить таким образом. Гораздо более интуитивно понятный способ сравнить их, как это делает Beyond Compare, в представлении сравнения папок. - person Waqas Ilyas; 13.01.2017
comment
@WaqasIlyas, о, точно, абсолютно. Этот конкретный метод будет работать для форматов файлов, которые в основном представляют собой один (несколько многословный) файл, который затем заархивирован (для сжатия), например, новые форматы Office .docx, .xlsx и т. д. - person Fab; 16.01.2017