Что такое jjui?
jjui — это терминальный интерфейс для Jujutsu, Git-совместимой системы контроля версий, которой управляют командой jj. Запустите его внутри репозитория jj, и он покажет граф ревизий, а затем позволит работать с ним напрямую: менять revset с автодополнением, чтобы выбрать, что показывать, делать rebase отдельной ревизии или целой ветки, выполнять squash, split и abandon ревизий, перемещать закладки, открывать ревизию, чтобы увидеть её файлы и диффы и восстанавливать файлы по одному, смотреть вывод jj show и jj diff рядом с графом, выполнять push и fetch через меню Git, а также просматривать журнал операций и восстанавливать состояние из него. Всё работает с клавиатуры или мышью. jjui написан на Go автором Ibrahim Dursun и распространяется под лицензией MIT.
apt upgrade обновляет jjui вместе с jj, от которого он зависит.
⚡ Ключевые возможности jjui
🌳 Живой граф ревизий
jjui открывается на том же графе, что печатает jj log, но по нему можно перемещаться, выбирать ревизии и выполнять над ними действия, а граф перерисовывается после каждого изменения.
🔎 Revset с автодополнением
Редактируйте revset в верхней части экрана, чтобы выбрать, какие ревизии показывать; функции и псевдонимы дополняются по мере ввода, так что язык revset не нужно держать в голове.
✂️ Rebase, squash, split, abandon
Переносите одну ревизию или целую ветку на другую, вливайте ревизию в родителя через squash, разбивайте её на две, отбрасывайте её или перемещайте закладку, всё прямо из графа, и сразу видьте результат.
📄 Файлы, диффы и предпросмотр
Откройте ревизию, чтобы увидеть список изменённых в ней файлов, прочитать их диффы и интерактивно восстановить файлы, или держите панель предпросмотра с выводом jj show или jj diff для выбранной ревизии.
🔄 Меню Git и журнал операций
Выполняйте push и fetch через меню Git, не покидая граф, и просматривайте журнал операций, чтобы увидеть, что изменилось, и вернуть репозиторий в более раннее состояние.
🖱️ Клавиатура, мышь, Lua и темы
У каждого действия есть сочетание клавиш (нажмите ?, чтобы увидеть их список), и мышь тоже работает. Скрипты на Lua добавляют ваши собственные действия, а темы меняют цвета.
apt upgrade держит вас на последней версии.
📦 Установка из deb.griffo.io
Шаг 1: Добавить репозиторий
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 Есть вечно бесплатное зеркало. deb-free.griffo.io раздаёт пакеты бесплатно навсегда — без аккаунта, без подписки, не более 2 месяцев позади upstream, исправления безопасности сразу. Сейчас там cliamp, Forgejo Runner, Ghostty, lazydocker, Oh My Posh, Uncloud и Zed; jjui среди них нет, поэтому репозиторий выше — единственный способ установить его сегодня; попросите, и его можно добавить.
🧩 О варианте extrepo. extrepo — штатный инструмент Debian для внешних репозиториев: он создаёт файл sources и устанавливает ключ подписи, предварительно сверив его с подписанными метаданными. Этот репозиторий зарегистрирован в нём как griffo, а бесплатное навсегда зеркало — как griffo-free, поэтому в Debian (bookworm, trixie, forky и sid) команды выше и есть вся настройка.
extrepo настраивает только файл sources и ключ — учётные данные подписки по-прежнему прописываются в /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu не поддерживается, так как extrepo публикует метаданные только для выпусков Debian: там используйте команды с sudo или от root.
Шаг 2: Установить jjui
# Установить последнюю версию jjui (подтягивает jujutsu, который даёт jj)
sudo apt install jjui
# Проверить установку
dpkg -s jjui | grep Version# Установить последнюю версию jjui (подтягивает jujutsu, который даёт jj)
apt install jjui
# Проверить установку
dpkg -s jjui | grep VersionШаг 3: Первый запуск
# jjui управляет jj, поэтому начинайте внутри репозитория jj
cd ~/src/myproject
# Уже есть checkout Git? Сначала разместите рядом с ним jj
jj git init --colocate
# Открыть граф ревизий
jjui
# Нажмите ? внутри jjui для списка клавиш, q для выхода🎯 Базовые примеры использования
Запуск и настройка jjui:
# Открыть граф ревизий репозитория, в котором вы находитесь
jjui
# Редактировать конфигурацию в $EDITOR (клавиши, тема, действия на Lua)
jjui -config
# jjui запускает jj из вашего PATH; проверьте, какая это версия
jj --versionВнутри jjui:
# Нажмите ?, чтобы увидеть все клавиши текущего представления
# Меняйте revset вверху, с автодополнением, чтобы выбрать, что показывать
# Выберите ревизию и сделайте rebase, squash, split или abandon, или переместите закладку
# Откройте ревизию, чтобы увидеть её файлы, прочитать диффы и восстановить файлы по одному
# Смотрите jj show / jj diff рядом с графом или откройте журнал операций, чтобы восстановить состояние
# Push и fetch через меню Git, не покидая графОбновления:
# jjui и jj обновляются вместе с остальной системой
sudo apt update && sudo apt upgrade
# Какие версии установлены и какие самые новые доступны
apt policy jjui jujutsu
# Удалить (jj остаётся установленным)
sudo apt remove jjui# jjui и jj обновляются вместе с остальной системой
apt update && apt upgrade
# Какие версии установлены и какие самые новые доступны
apt policy jjui jujutsu
# Удалить (jj остаётся установленным)
apt remove jjui🔧 Интеграции
jjui — это интерфейс к jj, поэтому он подходит везде, где уже используется jj:
- Jujutsu: каждое действие запускает команду
jj, поэтому jjui видит тот же репозиторий, конфигурацию и псевдонимы revset, что и сам jj; пакет зависит отjujutsu (>= 0.37), а deb.griffo.io пакует Jujutsu для всех версий, так что apt устанавливает его вместе с jjui - Удалённые репозитории Git: в совмещённом (colocated) репозитории push и fetch из меню Git идут в ваши обычные удалённые репозитории Git с уже используемыми учётными данными
- Ваш редактор:
jjui -configоткрывает файл конфигурации в$EDITOR, где хранятся сочетания клавиш, тема и собственные действия - Скрипты на Lua: пишите собственные действия на Lua и назначайте им клавиши для команд jj, которые вы запускаете часто
- Темы: цвета графа, выделения и панелей берутся из темы, которую можно поменять или написать самому
- Мышь: щёлкайте, чтобы выбирать ревизии, и прокручивайте граф и предпросмотр в любом терминале с поддержкой мыши
- Документация: upstream не выпускает man-страницу, поэтому полное руководство находится на idursun.github.io/jjui, а
?внутри jjui показывает список клавиш
🚀 Почему стоит выбрать deb.griffo.io?
- Официальный Debian: не пакует jjui —
apt install jjuiна стандартной системе завершится ошибкой - Загрузки из upstream: zip с одним бинарником со страницы релизов GitHub, который копируется в PATH вручную и скачивается заново для каждого релиза, а jj устанавливается отдельно
- Сборка из исходников: тулчейн Go и
go installдля каждого релиза, а jj всё равно нужно устанавливать каким-то другим способом - deb.griffo.io: последняя версия с автоматическими обновлениями
- ✅ Единственный источник apt: jjui нет ни в архивах Debian, ни в архивах Ubuntu; этот репозиторий пакует официальный релиз upstream
- ✅ jj идёт в комплекте: пакет зависит от
jujutsu (>= 0.37), минимальной версии upstream, а deb.griffo.io пакует Jujutsu для всех версий, так чтоsudo apt install jjuiза один шаг устанавливает свежий jj - ✅ Честная упаковка: бинарник upstream в
/usr/bin/jjui— upstream не выпускает ни man-страницы, ни дополнений для оболочки, поэтому пакет их не выдумывает - ✅ Автоматические обновления: пакеты обновляются в течение нескольких часов после релиза upstream
- ✅ Две архитектуры: amd64 и arm64 на всех версиях, так что один и тот же jjui работает на ноутбуках, серверах и ARM-платах вроде Raspberry Pi
- ✅ Много дистрибутивов: работает на Bookworm, Trixie, Forky и Sid
- ✅ Простое обслуживание: обновления обычными командами apt
📦 Репозиторий сборки пакета
Пакеты для Debian собираются и поддерживаются автоматически в этом репозитории GitHub:
- 🪢 jjui-debian - Сборки последних выпусков
🔗 Похожие пакеты
Также доступны в deb.griffo.io:
- Jujutsu - Система контроля версий jj, которой управляет jjui, устанавливается вместе с ним
- lazygit - Терминальный интерфейс для Git, для репозиториев, с которыми вы всё ещё работаете через git
- GitUI - Быстрый терминальный интерфейс для Git, только с клавиатуры
- difftastic - Структурный инструмент сравнения, который jj может использовать для своих диффов
- serie - Наглядный граф коммитов Git в терминале