Jujutsu

詳細情報

タイトル Jujutsu
URL https://github.com/martinvonz/jj
バージョン ver 0.23.0
更新日 2024/11/07
追加日 2024/02/08
種別 フリーソフト / オープンソース(Apache)
説明 ソフトウェアプロジェクトのための強力なバージョン管理システム。

レビュー

Jujutsuはソフトウェア開発のための強力なバージョン管理ツール。

Googleのエンジニアによって開発されていて、現在デファクトスタンダードとなっているGitの複雑なコマンドラインの問題を解決し、直感的に使用できるようにデザインされている。物理的なバックエンドとして、ネイティブストレージのほかに、Gitリポジトリを使用することも可能。

以下のような特徴を持っている。

  • コミットとしての作業コピー: ファイルへの変更は通常のコミットとして自動的に記録され、その後の変更のたびに修正される。この「スナップショット」デザインは、ユーザー向けのデータモデルを単純化し、内部アルゴリズムを単純化し、Gitの隠し場所やインデックス/ステージング領域のような機能を完全に包含する。
  • 操作ログとアンドゥ: Jujutsuは、コミット、プル、プッシュに至るまで、リポジトリ上で実行されたすべての操作を記録する。
  • 自動リベースと競合の解決: コミットを変更すると、すべての子孫は変更されたばかりのコミットの上に自動的にリベースされる。これにより、「パッチベース」のワークフローが簡単になる。
  • 安全な同時レプリケーション: Jujutsuは同時実行シナリオの下で安全であるように設計されている。rsyncやDropboxで保存されたリポジトリを使用しても、リポジトリが破損した状態になることはない。最悪の場合、ローカルとリモートのコンフリクトが発生し、それを解決する必要がある。

Rustで作られていて、Windows/macOS/Linux用の実行ファイルが準備されている。

スクリーンショット

更新グラフ

バージョン履歴

v0.23.0

Security fixes

  • Fixed path traversal by cloning/checking out crafted Git repository containing
    .., .jj, .git paths. (GHSA-88h5-6w7m-5w56; CVE-2024-51990)

Breaking changes

  • Revset function names can no longer start with a number.

  • Evaluation error of revsets.short-prefixes configuration is now reported.

  • The HEAD@git symbol no longer resolves to the Git HEAD revision. Use
    git_head() or @- revset expression instead. The git_head template
    keyword now returns a boolean.

  • Help command doesn't work recursively anymore, i.e. jj workspace help root
    doesn't work anymore.

  • The color label

(省略されました)
v0.22.0

Breaking changes

  • Fixing #4239 means the
    ordering of some messages have changed.

  • Invalid ui.graph.style configuration is now an error.

  • The builtin template branch_list has been renamed to bookmark_list as part
    of the jj branch deprecation.

Deprecations

  • jj branch has been deprecated in favor of jj bookmark.

    Rationale: Jujutsu's branches don't behave like Git branches, which a
    confused many newcomers, as they expected a similar behavior given the name.
    We've renamed them to "bookmarks" to match the actual behavior, as we think
    that describes them better, and they also behave similar to Mercurial's
    bookmarks.

(省略されました)
v0.21.0

Breaking changes

  • next/prev will no longer infer when to go into edit mode when moving from
    commit to commit. It now either follows the flags --edit|--no-edit or it
    gets the mode from ui.movement.edit.

Deprecations

  • jj untrack has been renamed to jj file untrack.

New features

  • Add new boolean config knob, ui.movement.edit for controlling the behaviour
    of prev/next. The flag turns edit mode on and off permanently when set
    respectively to true or false.

  • All diff formats except --name-only now include information about copies and
    moves. So do exter

(省略されました)
v0.20.0

Note to packagers

  • jj now links libgit2 statically by default. To use dynamic linking, you
    need to set the environment variable LIBGIT2_NO_VENDOR=1 while compiling.
    (#4163)

Breaking changes

  • jj rebase --skip-empty has been renamed to jj rebase --skip-emptied

  • jj backout --revision has been renamed to jj backout --revisions.
    The short alias -r is still supported.

  • The default immutable_heads() set
    now includes untracked_remote_branches() with the assumption that untracked
    branches aren't managed by you. Therefore, untracked branches are no longer
    displayed in jj log by

(省略されました)
v0.19.0

Breaking changes

  • In revset aliases, top-level kind:pattern expression is now parsed as
    modifier. Surround with parentheses if it should be parsed as string/file
    pattern.

  • Dropped support for automatic upgrade of repo formats used by versions before
    0.12.0.

  • jj fix now defaults to the broader revset -s reachable(@, mutable())
    instead of -s @.

  • Dropped support for deprecated jj branch delete/forget --glob option.

  • jj branch set now creates new branch if it doesn't exist. Use jj branch move to ensure that the target branch already exists.
    #3584

Deprecations

  • Replacing

(省略されました)
v0.18.0

Breaking changes

  • Dropped support for ui.default-revset config (replaced by revsets.log in
    0.8.0).

  • The commit_summary_no_branches template is superseded by
    templates.branch_list.

  • jj split will now refuse to split an empty commit.

  • jj config list now uses multi-line strings and single-quoted strings in the
    output when appropriate.

  • jj config get/list/set now parse name argument as TOML
    key
    . Quote meta characters as needed.
    Example: jj config get "revset-aliases.'trunk()'"

  • When updating the working copy away from an empty and undescribed commit, it
    is now abandoned even if

(省略されました)
v0.17.1

Fixed bugs

  • jj status no longer scans through the entire history to look for ancestors with conflicts.
v0.17.0

Breaking changes

  • The default template aliases were replaced as follows:

    • builtin_op_log_root(op_id: OperationId) ->
      format_root_operation(root: Operation)
    • builtin_log_root(change_id: ChangeId, commit_id: CommitId) ->
      format_root_commit(root: Commit)
    • builtin_change_id_with_hidden_and_divergent_info ->
      format_short_change_id_with_hidden_and_divergent_info(commit: Commit)
  • The --revision option of jj rebase is renamed to --revisions. The short
    alias -r is still supported.

New features

  • The list of conflicted paths is printed whenever the working copy changes.
    This can be

(省略されました)
v0.16.0

Deprecations

  • jj move was deprecated in favor of jj squash.

Breaking changes

  • The git_head template keyword now returns an optional value instead of a
    list of 0 or 1 element.

  • The jj sparse set --edit/--reset flags were split up into jj sparse edit/reset subcommands respectively.

  • The jj sparse subcommands now parse and print patterns as workspace-relative
    paths.

  • The jj log command no longer uses the default revset when a path is specified.

New features

  • Config now supports rgb hex colors (in the form #rrggbb) wherever existing color names are supported.

(省略されました)
v0.15.1

No code changes (fixing Rust Cargo.toml stuff).

v0.15.0

Breaking changes

  • The minimum supported Rust version (MSRV) is now 1.76.0.

  • The on-disk index format changed. New index files will be created
    automatically, but it can fail if the repository is co-located and predates
    Git GC issues #815. If
    reindexing failed, you'll need to clean up corrupted operation history by
    jj op abandon ..<bad operation ID>.

  • Dropped support for the "legacy" graph-drawing style. Use "ascii" for a very
    similar result.

  • The default log output no longer lists all tagged heads. Set revsets.log = "@ | ancestors(immutable_heads().., 2) | heads(immutable_heads())" to restore
    the old behavior.

  • Dropped support for the deprecated : revset operator. Use :: inst

(省略されました)