Система контроля версий Jujutsu
2025-10-13
·
3 мин. для прочтения
Система контроля версий Jujutsu.
Содержание
1 Общая информация
- Сайт: https://jj-vcs.github.io/jj
- Репозиторий: https://github.com/jj-vcs/jj
- Jujutsu (jj) — система контроля версий.
- Цели:
- Новый интерфейс для работы с Git.
- Новый дизайн для распределённого контроля версий.
2 Особенности jj
2.1 Интеграция с Git
- jj совместима с Git на уровне хранения данных — её можно использовать поверх существующих Git-репозиториев, не теряя историю и не нарушая совместимость с привычными инструментами;
- система использует Git-хранилище как физический бэкенд для данных, предлагая при этом собственные алгоритмы работы.
2.2 Упрощённая работа с изменениями
- рабочая копия представлена как полноценный коммит — это устраняет необходимость в механизме временного сохранения изменений (stash) и снимает часть ограничений, характерных для Git;
- изменения в файлах автоматически становятся частью коммита.
2.3 История операций и возможность откатиться назад
- jj запоминает все действия в репозитории: коммиты, скачивания (pull), пуши (push), ребейзы (rebase);
- можно легко откатить неудачный эксперимент или понять, что происходило в репозитории в определённый момент времени.
2.4 Работа с конфликтами как с полноценными объектами
- в отличие от Git и Mercurial, где конфликты часто воспринимаются как текстовый шум, jj трактует их как отдельные сущности, подобные коммитам;
- уже разрешённые конфликты могут автоматически применяться при повторном ребейзе или других похожих операциях в будущем.
2.5 Автоматический ребейз потомков
- при изменении коммита в середине истории jj автоматически перестраивает (ребейзит) все дочерние коммиты;
- нет необходимости вручную указывать, какие ветки двигать и как обновлять ссылки.
2.6 Отделение уровня хранения от уровня логики
- предусмотрен слой абстракций, позволяющий теоретически использовать различные движки хранения (Git, Mercurial и другие);
- это открывает простор для развития и экспериментирования.
2.7 Безопасные параллельные операции
- jj стремится безопасно работать в средах с параллельным доступом (например, при хранении репозитория в Dropbox-папке или использовании rsync для бэкапа);
- особая структура данных не даёт репозиторию оказываться в неконсистентном состоянии при одновременных операциях.
2.8 Полноценное журналирование и откат (undo)
- каждый шаг — от описания коммита до глобальных перезаписей истории — отражается в логе операций;
- возможность отмены любого действия помогает воссоздать утерянные состояния или разобраться в истории изменений.
3 Некоторые команды jj
jj init: инициализация репозитория;jj git clone URL [DEST]: клонирование репозитория;jj git init --colocate: добавление jj в существующий Git-репозиторий;jj log: просмотр важных изменений;jj status: проверка статуса рабочего изменения, родителя и изменённых файлов;jj undo: отмена последней команды;jj new: создание нового изменения;jj describe -m "edit foo": задание описания изменения;jj bookmark list: показ всех закладок;jj bookmark track: связывание локальной закладки с удалённой веткой;jj git fetch: получение изменений из удалённого репозитория;jj git push: отправка изменений в удалённый репозиторий.