Контроль версий Kicad-проектов

В статье показано, как, используя Git, делать графическое сравнение схем из Kicad-проектов.

Результат можно видеть на рисунках:

Рисунок 1: Добавление операционного усилителя к RC-цепочке.


Рисунок 2: Перемещение схемы на операционном усилителе.

Зеленым цветом отмечаются добавления, красным — удаления, коричневым — участки без изменения.

Во-первых, чтобы было удобнее работать, в каталоге проекта следует создать файл .gitignore со следующим содержанием:
*.bck
*.bak
*.000

Это нужно, чтобы Git игнорировал резервные копии схем (*.bck, *.bak) и плат (*.000). Все остальные файлы должны, без исключения, подвергаться контролю версий, в том числе *-cache.lib.

Графическое сравнение схем


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

Разработчики Kicad обещают сделать так, чтобы можно было работать с редактором схем из скриптов (для редактора печатных плат это уже сделано), тогда создание svg-файлов можно будет автоматизировать.

Выводить схему в svg можно в любом режиме (цветном или черно-белом), но желательно с размером пера побольше. На мой взгляд, лучше, если перо размером 0,3 мм (0,012 дюйма).

Чтобы научить Git сравнивать svg-файлы, в каталоге проекта требуется создать файл .gitattributes со следующим содержанием:
*.svg diff=kicad_diff

и отредактировать файл .git/config, добавив в него:
[diff "kicad_diff"]
	command = "bash kicad-diff.sh"

В файле .gitattributes мы говорим Git'у использовать драйвер kicad_diff для сравнения. А в файле config мы описываем этот драйвер, таким образом, чтобы Git запускал скрипт kicad-diff.sh, который делает остальную работу.

Скрипт написан на Bash, но это не мешает ему работать под разными ОС. При установке Git на Windows устанавливается и Bash.

Скрипт должен находиться в каталоге проекта. Его код я приведу в самом конце, а пока опишу как он работает.

Когда пользователь выполняет команду «git diff», Git передает скрипту две версии svg-файлов, скрипт раскрашивает два svg разными цветами и сливает их в один png файл. Затем, png-файл отображается в программе, которая по умолчанию назначена для просмотра png-файлов.

Для манипуляции с изображениями используются утилиты из пакета Imagemagick. В Линукс этот пакет установлен по умолчанию, для Виндовс придется скачать и установить. Если устанавливать не меняя настройки, то пакет установится как надо, добавив путь к своим утилитам в переменную окружения PATH.

Немного о применении «git diff»:
  • Команда, чтобы увидеть изменения схемы, которые не были добавлены в индекс для последующего коммита:
    git diff file_name.svg
  • Команда, чтобы увидеть изменения схемы между двумя коммитами:
    git diff 2f72a80 c3a5b64 file_name.svg
    где 2f72a80, c3a5b64 — сокращенные хеши двух коммитов.

Генерация сравнения может занимать некоторое время. Так на моей старенькой машине, генерация сравнения из одной пары svg занимает несколько секунд.

Ссылки



Скрипт kicad-diff.sh


#!/bin/bash
# Автор: bravikov@gmail.com

# Скрипт, вызываемый Git'ом, для сравнения Kicad-схем ввиде svg-файлов.
# Скрипт сливает схемы в одно png-изображение, где
# удаленное - красным цветов, а добавленное - зеленым.
#
# Вызов: ./kicad-diff.sh path old-file old-hex old-mode new-file new-hex new-mode
# где:
#   path - имя файла
#   <old|new>-file - старая и новая версия файла
#   <old|new>-hex - SHA1-хеши из 40 шестнадцатеричных цифр
#   <old|new>-mode - восьмеричное представление прав доступа для файлов
# В параметры могут входить пользовательские рабочие файлы (например new-file из "git-diff-files"),
# /dev/null (например old-file при добавлении нового файла) или временные файлы (например old-file из индекса).
#

echo Вызов $0

if [ $# -ne 7 ]
    then
        echo Неправильные аргументы 1>&2
        exit 1
fi

OLD_FILE=$2
NEW_FILE=$5

OLD_PNG_FILE=/tmp/kicad-diff-old-file.png
NEW_PNG_FILE=/tmp/kicad-diff-new-file.png
RESULT_FILE=/tmp/kicad-diff.png

# Проверка существования утилит imagemagiсk
if [[ ! (-x `which convert`) || ! (-x `which composite`) ]];
    then
        echo "Ненайдены утилиты imagemagiсk"
        exit 1
fi

# Получить сравнение
convert -black-threshold 100% -fill red -opaque black -density 130 "$OLD_FILE" "$OLD_PNG_FILE"
convert -black-threshold 100% -fill green -opaque black -density 130 "$NEW_FILE" "$NEW_PNG_FILE"
composite -blend 50% -density 130 "$OLD_PNG_FILE" "$NEW_PNG_FILE" "$RESULT_FILE"

# Проверка существования утилит запуска

# Запустить просмотрщик изображений по умолчанию
if [ "$OS" = "Windows_NT" ]
    then
        if [[ -x `which start` ]]
            then start "$RESULT_FILE"
            else "Не возможно отобразить сравнение"
            exit 1
        fi
    else
        if [[ -x `which xdg-open` ]]
            then xdg-open "$RESULT_FILE"
            else "Не возможно отобразить сравнение"
            exit 1
        fi
fi

rm "$OLD_PNG_FILE" "$NEW_PNG_FILE"

exit 0
  • +5
  • 31 декабря 2013, 10:25
  • bravikov

Комментарии (16)

RSS свернуть / развернуть
Вот этого мне определенно не хватало. Без сарказма. Пойти осваивать кикад, что ли?
0
  • avatar
  • crab
  • 31 декабря 2013, 10:38
Кикад здесь незначительную роль играет, метод можно адаптировать под любую программу, которая может сгенерировать изображение в популярном формате. Например, если печатать схему в PDF, то тоже все получится, просто надо svg на pdf заменить. А Кикад я взял для примера, потому что только с ним работаю.
0
Очень интересно!
0
  • avatar
  • EW1UA
  • 31 декабря 2013, 10:56
Крутая фича и вот это по настоящему!
Не то что та отстойная реализация с архивами как это сделано в альтиуме.
-1
Не соглашусь с Вами! Конечно в Альтиуме перемудрили архивами теми… но меня много раз спасало!
-1
так я и не говорил что что-то плохого в том что есть хоть чтото.
Просто напросто реализовано сделали не удобно и не логично, особенно с учетом того что архивы создаются постоянно при сохранениях проекта. Была не так давно история у меня, на одном проекте архивы у меня под гиг гдето заняли, этож чокнуться можно какой задницей думали авторы альтиума, это при том что альтиум несколько тысяч элементов сбросил значения в дефолт еще «несколько архивов назад». На большом проекте где сотни и тысячи элементов такие глюки приводят в лютое бешенство. А то что когото спасает, так то ж только хорошо, другое дело что нужно десятки архивов перебирать и глазками сравнивать сотни и тысячи элементов.
В целом клево что хоть архивы есть, но могли бы сделать работу пусть даже с архивами намного более удобно, чтоб наглядно быстро в схеме найти то отличие что менялось.
0
эээ…
Просто напросто реализовано сделали не удобно и не логично,
Хоть видушку посмотрел? Не говоря уже о RTFM.
архивы у меня под гиг гдето заняли

Неужели в настройки заглянуть религия не позволяет?

Я недоумеваю (читать: я в а.уе). Вроде с одной стороны продвинутый разработчик, который блекфины и сдрам в два слоя разводит, в хайперлинксе проверяет целостность сигналов для любительского проекта с одной стороны. А с другой — даже настройки основного инструмента не изучает полностью.
маянипанимать
+2
Опять буду очень грубым, но сам напросился. Не знаешь — не гавкай.
Альтиум сам по себе «искаропки» умеет:

Как легко заметить — это родные настройки. Причем еще с десятой версии. Плюс, альтиевские архивные бэкапы живут параллельно с версионным контролем. Т.е. архивы создаются просто при каждом сохранении документа, а в SVN надо руками отправлять.
С другой стороны — да, наглядного графического сравнения порой недостает…
0
Да вообще-то сравнение там вполне вменяемое. Без подсветки изменений, зато со списком различий.
0
Ну, графически просто быстрее бывает (см.рис.1). Это с одной стороны. С другой стороны (см.рис.2) — только в заблуждение вводит. А если таких изменений много? Это ведь просто ужОс.
0
игрушки это все. для радиогубителей.
в проекте, где под 20 листов схемы и подавляющее большинство соединений через порты, вся эта муть совершенно ни к чему. и именно список изменений уберегает от того, что «где-то чего-то не заметил». а картинки это хорошо, красиво, но бесполезно.
0
Было бы неплохо для Eagle такую же штуку сделать.
0
  • avatar
  • foxit
  • 31 декабря 2013, 13:08
Там это проще, 6й игл держит схемы в хмл, а еще можно конвертить в картинку без особых проблем.
0
А я обычно в мелскософтовском visio сравниваю. Берешь любю схему (структурную, функциональную, принципиальную). Превращаешь требуеюмую. схему в графическое файл (bmp, tiff, png), вставляешь в визио, делаешь Ungroup. И красишь схему в требуемый цвет к примеру в красный. После этого вставляешь вторую (с которой требуется сравнить изменения). Повторяешь все действия и потом совмщешаешь схемы. Разница в цветах дает модифицированные участки.
0
Угу. Научите в визио загнать альтиумовскую схему (про разводку скромно молчу).
А еще научите подружить это все с гитом или свн…
-1
Дык схема то конвертится в граф. формат. Принт скрин еще никто не отменял. Ну и думаю в алитуме (сам не пользовался) уже наварняка есть конвертер в какой нить пиксельный векторый формат.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.