github jj-vcs/jj v0.35.0

2 days ago

About

jj is a Git-compatible version control system that is both simple and powerful. See
the installation instructions to get started.

Release highlights

  • Workspaces can now have their own separate configuration. For instance, you
    can use jj config set --workspace to update a configuration option only in
    the current workspace.

  • After creating a local bookmark, it is now possible to use jj bookmark track
    to associate the bookmark with a specific remote before pushing it. When
    pushing a tracked bookmark, it is not necessary to use --allow-new.

  • The new jj git colocation enable and jj git colocation disable commands
    allow converting between colocated and non-colocated workspaces.

Breaking changes

  • The remote_bookmarks(remote=pattern) revset now includes Git-tracking
    bookmarks if the specified pattern matches git. The default is
    remote=~exact:"git" as before.

  • The deprecated flag --summary of jj abandon has been removed.

  • The deprecated command jj backout has been removed, use jj revert instead.

  • The following deprecated config options have been removed:

    • signing.sign-all
    • core.watchman.register_snapshot_trigger
    • diff.format

Deprecations

  • jj bisect run --command <cmd> is deprecated in favor of
    jj bisect run -- <cmd>.

  • jj metaedit --update-committer-timestamp was renamed to
    jj metaedit --force-rewrite since the old name (and help text)
    incorrectly suggested that the committer name and email would not
    be updated.

New features

  • Workspaces may have an additional layered configuration, located at
    .jj/workspace-config.toml. jj config subcommands which took layer options
    like --repo now also support --workspace.

  • jj bookmark track can now associate new local bookmarks with remote.
    Tracked bookmarks can be pushed without --allow-new.
    #7072

  • The new jj git colocation command provides sub-commands to show the
    colocation state (status), to convert a non-colocated workspace into
    a colocated workspace (enable), and vice-versa (disable).

  • New jj tag set/delete commands to create/update/delete tags locally.
    Created/updated tags are currently always exported to Git as lightweight
    tags. If you would prefer them to be exported as annotated tags, please give
    us feedback on #7908.

  • Templates now support a .split(separator, [limit]) method on strings to
    split a string into a list of substrings.

  • -G is now available as a short form of --no-graph in jj log, jj evolog,
    jj op log, jj op show and jj op diff.

  • jj metaedit now accepts -m/--message option to non-interactively update
    the change description.

  • The CryptographicSignature.key() template method now also works for SSH
    signatures and returns the corresponding public key fingerprint.

  • Added template-aliases.empty_commit_marker. Users can override this value in
    their config to change the "(empty)" label on empty commits.

  • Add support for --when.workspaces config scopes.

  • Add support for --when.hostnames config scopes. This allows configuration to
    be conditionally applied based on the hostname set in operation.hostname.

  • jj bisect run accepts the command and arguments to pass to the command
    directly as positional arguments, such as
    jj bisect --range=..main -- cargo check --all-targets.

  • Divergent changes are no longer marked red in immutable revisions. Since the
    revision is immutable, the user shouldn't take any action, so the red color
    was unnecessarily alarming.

  • New commit template keywords local/remote_tags to show only local/remote
    tags. These keywords may be useful in non-colocated Git repositories where
    local and exported @git tags can point to different revisions.

  • jj git clone now supports the --branch option to specify the branch(es)
    to fetch during clone. If present, the first matching branch is used as the
    working-copy parent.

  • Revsets now support logical operators in string patterns.

Fixed bugs

  • jj metaedit --author-timestamp twice with the same value no longer
    edits the change twice in some cases.

  • jj squash: fixed improper revision rebase when both --insert-after and
    --insert-before were used.

  • jj undo can now revert "fetch"/"import" operation that involves tag updates.
    #6325

  • Fixed parsing of files(expr) revset expression including parentheses.
    #7747

  • Fixed jj describe --stdin to append a final newline character.

Contributors

Thanks to the people who made this release happen!

Don't miss a new jj release

NewReleases is sending notifications on new releases.