- PVSM.RU - https://www.pvsm.ru -

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

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

Плюсы:

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

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

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

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

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

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

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

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

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

Минусы:

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

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

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

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

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

Автор: sheknitrtch

Источник [8]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/git/401247

Ссылки в тексте:

[1] Martin von Zweigbergk: https://www.linkedin.com/in/martinvonz

[2] Jujutsu: https://github.com/martinvonz/jj

[3] Darcs: https://en.wikipedia.org/wiki/Darcs

[4] рекомендуют: https://martinvonz.github.io/jj/latest/FAQ/#how-can-i-keep-my-scratch-files-in-the-repository-without-committing-them

[5] libgit2: https://github.com/libgit2/libgit2

[6] issue: https://github.com/martinvonz/jj/issues/63

[7] план: https://martinvonz.github.io/jj/latest/design/git-submodules/

[8] Источник: https://habr.com/ru/articles/853416/?utm_source=habrahabr&utm_medium=rss&utm_campaign=853416