Система контроля версий 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 : отправка изменений в удалённый репозиторий.

4 Соотнесение с git

Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Мои научные интересы включают физику, администрирование Unix и сетей.