Jujutsu — когда Git встретил Mercurial и стал удобнее

24 июл 2025
31,387
1,201
104
1 неделя

Знакомая ситуация? Только собрался сделать git commit, как получаешь "Your local changes to the following files would be overwritten...". Или потратил полчаса на разрешение конфликтов при rebase, а они снова возникают при следующем слиянии. Jujutsu (или просто jj) — это свежий взгляд на систему контроля версий, который избавляет от этих и многих других проблем.

Что такое Jujutsu?

Jujutsu — это VCS нового поколения, которая:

  • Совместима с Git «из коробки» (использует Git как бэкенд)
  • Вдохновлена лучшими идеями Mercurial и Darcs
  • Добавляет инновационные фичи вроде автоматического разрешения конфликтов

Разрабатывается с 2019 года, сейчас используется командой Google (хотя и не является официальным продуктом компании).

Кому стоит присмотреться?

  • Разработчикам, уставшим от сложностей Git
  • Командам, которые ценят удобство Mercurial
  • Всем, кто работает с большими репозиториями и сложными ветвлениями

5 причин попробовать Jujutsu

1. Рабочая копия — это полноценный коммит

В отличие от Git, где есть разделение на рабочую директорию, индекс и коммиты, в Jujutsu рабочая копия сама является коммитом. Это значит:

  • Никаких "рабочая директория грязная"
  • Можно задавать сообщение коммита до завершения изменений
  • Не нужен git stash — просто переключайтесь между коммитами
# В Git вам бы пришлось:
git stash
git checkout other-branch
git stash pop

# В Jujutsu просто:
jj checkout other-branch

2. Конфликты — объекты первого класса

В Git конфликты — это временное состояние, которое нужно немедленно разрешать. Jujutsu хранит информацию о конфликтах прямо в коммитах:

Реклама
  • Можно отложить разрешение конфликтов
  • Решения автоматически применяются к потомкам коммита
  • Нет страха «испортить» историю при rebase

Пример разрешения конфликтов

3. Полная история операций

Jujutsu записывает все действия с репозиторием:

  • Кто что сделал и когда
  • Состояние репозитория после каждой операции
  • Возможность откатить любое действие, не только последнее

Это особенно полезно при совместной работе — теперь можно точно сказать, «как мы сюда попали».

4. Автоматический rebase

При изменении коммита все его потомки автоматически перебазируются. В Git для этого нужно явно указывать --update-refs, а в Jujutsu это происходит по умолчанию.

5. Совместимость с Git

Можно:

  • Работать с существующими Git-репозиториями
  • Использовать GitHub/GitLab/Bitbucket
  • В любой момент вернуться к обычному Git

Совместимость с Git

Технические особенности

  • Написана на Rust (использует библиотеку gitoxide)
  • Модульная архитектура — в будущем возможны другие бэкенды кроме Git
  • Оптимизирована для производительности

Когда особенно пригодится?

  1. При активном рефакторинге — автоматический rebase сохранит нервы
  2. В больших командах — понятная история операций упрощает коммуникацию
  3. При работе с длинными ветками — конфликты разрешаются предсказуемо

Насколько готов к production?

Проект активно развивается, но:

  • Основные функции стабильны
  • Нет поддержки submodules
  • Возможны изменения форматов хранения до версии 1.0.0

Разработчики (включая создателя Мартина фон Цвайгберга) уже больше года используют Jujutsu для работы над самим Jujutsu — хороший знак!

Как начать?

  1. Установите через пакетный менеджер:
    # macOS
    brew install jj
    
    # Linux (Ubuntu)
    sudo apt install jj
    
  2. Пройдите официальный туториал
  3. Попробуйте на тестовом репозитории

Jujutsu — это не «ещё один клон Git», а свежий взгляд на контроль версий. Если вы:

  • Часто путаетесь в Git
  • Цените удобство Mercurial
  • Хотите больше предсказуемости при работе с историей

— самое время попробовать. Возможно, это будет ваш новый основной VCS.

А если остались сомнения — загляните в сообщество Jujutsu, разработчики активно помогают новичкам.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.