GitBor

Граф коммитов

Визуализация истории репозитория: рендер на Canvas, виртуализация, поиск

Граф коммитов — главный экран GitBor. Реализован модулем src/renderer/src/features/graph/, layout считается в src/core/git/GraphLayout.ts.

Рендер на Canvas с виртуализацией

Каждая строка графа рисуется на HTML5 Canvas, а не через DOM. Для больших историй включается виртуализация: рендерятся только строки в видимой области и небольшой буфер сверху и снизу. Это позволяет работать с репозиториями на 15000+ коммитов без падения производительности — DOM-tree остаётся плоским.

Worker-поток для тяжёлых layout

Расчёт позиции каждого узла графа (какая ветка в какой полосе, как соединять линии между коммитами) делается в GraphLayout.ts. Для маленьких репозиториев — синхронно в main-процессе. Когда количество коммитов превышает 2000, layout уходит в WorkerPool (src/core/workers/), который держит 2 worker_threads с round-robin балансировкой и автоматическим перезапуском при падении.

Та же логика — для парсинга git log (порог 512 KB) и git status (256 KB).

Дедупликация payload между вкладками

MessageBridge.sentGraphByRepo хранит хеш последнего отправленного layout для каждого репозитория. Когда вы переключаетесь A → B → A, повторный layout с тем же хешем не отправляется в renderer — экономит мегабайты JSON через IPC при частых переключениях.

Цвета веток

Каждая полоса (lane) графа получает свой цвет. Цвет стабилен пока ветка существует — это упрощает отслеживание ветки взглядом при прокрутке.

Навигация

ДействиеЧто делает
Клик по коммитуЗагружает детали + автоматически выбирает diff первого изменённого файла
Двойной клик по ветке (в сайдбаре)git checkout
↑ / ↓ в графеПеремещение между коммитами с авто-скроллом, чтобы выбранный коммит оставался виден
Ctrl+FПоиск по теме коммита, имени автора или префиксу хеша
Правый клик по коммитуКонтекстное меню: checkout, reset, cherry-pick, revert, rebase, compare, copy SHA

Сравнение двух коммитов

Правый клик по первому коммиту → Compare From Here. Затем правый клик по второму → Compare with 'abc1234'. GitBor покажет diff между этими двумя точками — удобно для проверки серии изменений.

Подписанные коммиты

В графе показывается бейдж ✓ Signed для коммитов, прошедших GPG/SSH верификацию. Цветовая кодировка:

  • Зелёный (Good) — подпись валидна и доверена.
  • Оранжевый (Untrusted, Expired) — подпись валидна, но ключ не доверен или истёк.
  • Красный (Bad, Revoked) — подпись невалидна или ключ отозван.

TODO: скриншот графа с цветными ветками и signed-бейджем.