Jujutsu — новая система контроля версий

Кому нужная новая VCS, когда уже есть Git, Mercurial, SVN, Perforce, Darcs и прочие? Автор проекта Jujutsu считает, что ещё есть куда совершенствоваться. Знакомьтесь — Martin von Zweigbergk из Google работает над проектом Jujutsu, или для краткости jj.

Плюсы:

Невероятно гибкая работа с коммитами и ветвлением. Основное отличие jj от Git cостоит в том, что история коммитов представляет из себя последовательность патчей, а не snapshot-ов. Идея взята из Darcs. Такой подход позволяет легко переписывать историю коммитов, rebase становится тривиальным, коммиты (патчи) можно спокойно перемещать между ветками, конфликтов меньше (автоматическое разрешение конфликтов работает лучше, чем в Git или Mercurial).

Например, у вас есть история коммитов, но один коммит «Create file A» не должен быть в истории. Подход jj состоит в том, что все коммиты после «плохого» нужно переместить (rebase) на «Initial commit». Для этого нужно поменять ссылку на родителя командой jj rebase -s yyltlwtl --destination krpsnnrr.

6cee64c7478ee75fff9b8c605517ec95.png

Если в качестве родительского коммита указать не один, а 2 и более, то jj смержит эти ветки. Случайно смержили не ту ветку? Ничего страшного. Сделайте rebase, указав только одного родителя, тем самым отменив слияние веток.

Можете переключится на старый коммит, поменять файлы, изменить комментарий, а затем вернуться к самому свежему коммиту. Изменения в истории автоматически подтянутся.

Отмена любого действия. Все изменения в репозитории можно откатить. Есть как простой jj undo так и полная история ваших действий над репозиторием jj op log.

Поддерживает чтение и запись в Git remote. Можете попробовать импортировать свой pet-project и поиграться с коммитами

Написан на Rust. Это заметно по скорости работы и простоте установки: скачиваете один бинарник и прописываете его в PATH. Правда из-за этого возникает проблема с GIT+SSH. Об этом ниже.

Консоле-ориентированность. Утилита jj делает работу в консоли приятной. История коммитов выглядит красиво. jj diff удобно подсвечивает изменения файлов прямо в консоли.

Минусы:

Отсутсвие аналога git stage. Все изменения в файлах рабочей копии автоматически коммитятся. Нельзя закоммитить часть локальных изменений, оставив другие изменения висеть в рабочей комии. Авторы jj рекомендуют создать отдельную private ветку, запретив её заливать на сервер. Все локальные изменения нужно делать в private ветке, сливая её с последним коммитом, и отменяя merge перед отправкой на сервер.

Непонятно, какой flow использовать. Можно продолжать использовать git flow. Но думаю стоит изобрести новые более гибкие правила для работы с ветками, фичами и релизами в jj.

Нет поддержки private key авторизации через SSH. Jujutsu не используется OpenSSH, установленный в системе. Вместо этого jj слинкован с libgit2. Поэтому он игнорирует ~/.ssh/config. По этому поводу есть issue в Github.

Нет поддержки git submodules. Но у разработчиков есть план, как их добавить.

Jujutsu ещё не добрался до версии 1.0, но уже смог удивить своими идеями и подходом к VCS. Определённо стоит попробовать, хотябы для личного пользования. Основная проблема jj такая же как у Mercurial, Bazaar и прочих — они не Git. Многие уже подсели на Github/Gitlab и не могут легко переключиться на jj. Инструменты и инфраструктура вокруг Git делают его стандартом для индустрии.

© Habrahabr.ru