- PVSM.RU - https://www.pvsm.ru -
Кому нужная новая 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
.
Если в качестве родительского коммита указать не один, а 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
Нажмите здесь для печати.