git diff для изображений

Стандартный Git diff не показывает различия между изображениями. Это понятно: он для этого не предназначен. Однако было бы здорово, если бы Git показывал изменения изображений так же, как изменения кода, не так ли? По крайней мере, что-то более приятное, чем...

$ git diff
diff --git a/es-ES/images/autobuilder.png b/es-ES/images/autobuilder.png
index 6f5f6eb..6f0dd78 100644
Binary files a/es-ES/images/autobuilder.png and b/es-ES/images/autobuilder.png differ

Примерно так:

Я сделал это с помощью скрипта, который использует библиотеку ImageMagick для сравнения изображений. Вот как можно сделать так же.

В дистрибутивах на базе Debian вам нужно установить этот пакет, запустив...

sudo apt install imagemagick

Затем в файле с разрешением на выполнение по любому пути, доступному через переменную среды $PATH, напишите следующий код, который я сохранил в ~/bin/git-imgdiff для этого руководства:

#!/bin/sh
compare $2 $1 png:- | montage -geometry +4+4 $2 - $1 png:- | display -title "$1" -

Теперь укажите Git'у расширения, которые вы хотите считать изображениями, с помощью файла .gitattributes Если он не существует, создайте его в корневом каталоге проекта Git или в каталоге $HOME со следующими строками для форматов GIF, PNG и JPG, или, если файл уже существует, просто добавьте в них следующее:

*.gif diff=image
*.jpg diff=image
*.jpeg diff=image
*.png diff=image

Чтобы конфигурация .gitattributes, сохраненная в каталоге $HOME, загрузилась для всех проектов Git, нужно выполнить следующую команду:

git config --global core.attributesFile ~/.gitattributes

Теперь настройте Git на запуск скрипта, который вы создали ранее, при сравнении изображений:

git config --global diff.image.command '~/bin/git-imgdiff'

Видите, всё очень просто. И да, вы можете настроить скрипт под свои нужды.

Если вам просто нужно узнать, какие метаданные изменились, вы можете установить exiftool, чтобы отобразить что-то вроде этого:

index 6f5f6eb..6f0dd78 100644
--- a/es-ES/images/autobuilder.png
+++ b/es-ES/images/autobuilder.png
@@ -1,21 +1,21 @@
 ExifTool Version Number         : 10.10
-File Name                       : vHB91h_autobuilder.png
-Directory                       : /tmp
-File Size                       : 44 kB
-File Modification Date/Time     : 2020:03:09 02:12:08+01:00
-File Access Date/Time           : 2020:03:09 02:12:08+01:00
-File Inode Change Date/Time     : 2020:03:09 02:12:08+01:00
-File Permissions                : rw-------
+File Name                       : autobuilder.png
+Directory                       : es-ES/images
+File Size                       : 63 kB
+File Modification Date/Time     : 2020:03:09 01:35:22+01:00
+File Access Date/Time           : 2020:03:09 01:35:22+01:00
+File Inode Change Date/Time     : 2020:03:09 01:35:22+01:00
+File Permissions                : rw-rw-r--
 File Type                       : PNG
 File Type Extension             : png
 MIME Type                       : image/png
-Image Width                     : 796
-Image Height                    : 691
+Image Width                     : 794
+Image Height                    : 689
 Bit Depth                       : 8
 Color Type                      : RGB
 Compression                     : Deflate/Inflate
 Filter                          : Adaptive
 Interlace                       : Noninterlaced
-Significant Bits                : 8 8 8
-Image Size                      : 796x691
-Megapixels                      : 0.550
+Background Color                : 255 255 255
+Image Size                      : 794x689
+Megapixels                      : 0.547

Если всё так, читайте дальше.

Установите exiftool. В дистрибутивах, созданных на основе Debian, вам нужно выполнить эту команду:

sudo apt install libimage-exiftool-perl

Затем добавьте это в файл .gitattributes:

*.png diff=exif
*.jpg diff=exif
*.gif diff=exif

И наконец...

git config --global diff.exif.textconv exiftool`

По желанию, в двух показанных мною способах вы можете не использовать --global, чтобы выбранный инструмент применялся только к проекту Git, над которым вы работаете.

Надеюсь, теперь вам будет проще просматривать изменения, внесенные в изображения в рамках проекта.

Комментарии