You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
jj is a Git-compatible version control system that is both simple and powerful. See the installation instructions to get started.
Release highlights
Improved Git push/fetch compatibility by spawning an external git process.
This can be enabled by the git.subprocess=true config knob, and will be the
default in a future release.
jj log can now show cryptographic commit signatures. The output can be
controlled by the ui.show-cryptographic-signatures=true config knob.
Breaking changes
jj abandon now deletes bookmarks pointing to the revisions to be abandoned.
Use --retain-bookmarks to move bookmarks backwards. If deleted bookmarks
were tracking remote bookmarks, the associated bookmarks (or branches) will be
deleted from the remote on jj git push --all. #3505
jj init --git and jj init --git-repo have been removed. They were
deprecated in early 2024. Use jj git init instead.
The following deprecated commands have been removed:
jj cat is replaced by jj file show.
jj chmod is replaced by jj file chmod.
jj files is replaced by jj file list.
The deprecated -l short alias for --limit in jj log, jj op log
and jj obslog has been removed. The -n short alias can be used instead.
The deprecated --siblings options for jj split has been removed. jj split --parallel can be used instead.
The deprecated fix.tool-command config option has been removed.
In colocated repos, the Git index now contains the changes from all parents
of the working copy instead of just the first parent (HEAD). 2-sided
conflicts from the merged parents are now added to the Git index as conflicts
as well.
The following change introduced in 0.25.0 is reverted:
jj config list now prints inline tables { key = value, .. } literally.
Inner items of inline tables are no longer merged across configuration
files.
jj resolve will now attempt to resolve all conflicted files instead of
resolving the first conflicted file. To resolve a single file, pass a file
path to jj resolve.
jj util mangen is replaced with jj util install-man-pages, which can
install man pages for all jj subcommands to a given path.
In jj config list template, value is now typed as ConfigValue, not as String serialized in TOML syntax.
jj git remote add/set-url now converts relative Git remote path to
absolute path.
jj log/op log now applies -n/--limitbefore the items are reversed.
Rationale: It's more useful to see the N most recent commits/operations, and
is more performant. The old behavior can be achieved by jj log .. | head. #5403
The builtin pager is switched to streampager. It can handle large
inputs better and can be configured.
Conflicts materialized in the working copy before jj 0.19.0 may no longer
be parsed correctly. If you are using version 0.18.0 or earlier, check out a
non-conflicted commit before upgrading to prevent issues.
Deprecations
New features
jj git {push,clone,fetch} can now spawn an external git subprocess, via
the git.subprocess = true config knob. This provides an alternative that,
when turned on, fixes SSH bugs when interacting with Git remotes due to libgit2s limitations #4979.
jj describe now accepts --edit.
jj evolog and jj op log now accept --reversed.
jj restore now supports -i/--interactive selection.
jj file list now supports templating.
There is a new builtin_op_log_oneline template alias you can pass to jj op log -T for a more compact output. You can use format_operation_oneline and format_snapshot_operation_oneline to customize parts of it.
New template function config(name) to access to configuration variable from
template.
New template function pad_centered() to center content within a minimum
width.
Templater now supports list.filter(|x| ..) method.
The diff commit template keyword now supports custom formatting via diff.files(). For example, diff.files().map(|e| e.path().display()) prints
changed file paths.
The diff.stat() template method now provides methods to get summary values.
jj log can now show cryptographic commit signatures. The output can be
controlled by the ui.show-cryptographic-signatures=true config knob. The
signature template can be customized using format_detailed_cryptographic_signature(signature) and format_short_cryptographic_signature(signature).
New git.sign-on-push config option to automatically sign commits which are
being pushed to a Git remote.
New git.push-new-bookmarks config option to push new bookmarks without --allow-new.
jj status now shows untracked files when they reside directly under a
tracked directory. There's still an issue that files under untracked
directories aren't listed. #5389
New merge-tools.<TOOL>.diff-expected-exit-codes config option to suppress
warnings from tools exiting with non-zero exit codes.
New fix.tools.TOOL.enabled config option to enable/disable tools. This is
useful for defining disabled tools in user configuration that can be enabled
in individual repositories with one config setting.
Added --into flag to jj restore, similarly to jj squash and jj absorb. It is equivalent to --to, but --into is the recommended name.
Italic text is now supported. You can set e.g. color.error = { fg = "red", italic = true } in your config.
New author_name/author_email/committer_name/committer_email(pattern)
revset functions to match either name or email field explicitly.
New subject(pattern) revset function that matches first line of commit
descriptions.
Conditional configuration now supports --when.commands to change
configuration based on subcommand.
The Jujutsu documentation site now publishes a schema for the official
configuration file, which can be integrated into your editor for autocomplete,
inline errors, and more.
Please see the documentation for more
on this.
Fixed bugs
jj git fetch with multiple remotes will now fetch from all remotes before
importing refs into the jj repo. This fixes a race condition where the
treatment of a commit that is found in multiple fetch remotes depended on the
order the remotes were specified.
Fixed diff selection by external tools with jj split/commit -i FILESETS. #5252
Conditional configuration now applies when initializing new repository. #5144
[diff.<format>] configuration now applies to .diff().<format>() commit
template methods.
Conflicts at the end of files which don't end with a newline character are
now materialized in a way that can be parsed correctly. #3968
Bookmark and remote names written by jj git clone to revset-aliases.'trunk()' are now escaped if necessary. #5359
Contributors
Thanks to the people who made this release happen!
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
About
jj is a Git-compatible version control system that is both simple and powerful. See the installation instructions to get started.
Release highlights
Improved Git push/fetch compatibility by spawning an external
gitprocess.This can be enabled by the
git.subprocess=trueconfig knob, and will be thedefault in a future release.
jj logcan now show cryptographic commit signatures. The output can becontrolled by the
ui.show-cryptographic-signatures=trueconfig knob.Breaking changes
jj abandonnow deletes bookmarks pointing to the revisions to be abandoned.Use
--retain-bookmarksto move bookmarks backwards. If deleted bookmarkswere tracking remote bookmarks, the associated bookmarks (or branches) will be
deleted from the remote on
jj git push --all.#3505
jj init --gitandjj init --git-repohave been removed. They weredeprecated in early 2024. Use
jj git initinstead.The following deprecated commands have been removed:
jj catis replaced byjj file show.jj chmodis replaced byjj file chmod.jj filesis replaced byjj file list.The deprecated
-lshort alias for--limitinjj log,jj op logand
jj obsloghas been removed. The-nshort alias can be used instead.The deprecated
--siblingsoptions forjj splithas been removed.jj split --parallelcan be used instead.The deprecated
fix.tool-commandconfig option has been removed.In colocated repos, the Git index now contains the changes from all parents
of the working copy instead of just the first parent (
HEAD). 2-sidedconflicts from the merged parents are now added to the Git index as conflicts
as well.
The following change introduced in 0.25.0 is reverted:
jj config listnow prints inline tables{ key = value, .. }literally.Inner items of inline tables are no longer merged across configuration
files.
jj resolvewill now attempt to resolve all conflicted files instead ofresolving the first conflicted file. To resolve a single file, pass a file
path to
jj resolve.jj util mangenis replaced withjj util install-man-pages, which caninstall man pages for all
jjsubcommands to a given path.In
jj config listtemplate,valueis now typed asConfigValue, not asStringserialized in TOML syntax.jj git remote add/set-urlnow converts relative Git remote path toabsolute path.
jj log/op lognow applies-n/--limitbefore the items are reversed.Rationale: It's more useful to see the N most recent commits/operations, and
is more performant. The old behavior can be achieved by
jj log .. | head.#5403
Upgraded
scm-recordfrom v0.4.0 to v0.5.0. See release notes athttps://github.com/arxanas/scm-record/releases/tag/v0.5.0.
The builtin pager is switched to
streampager. It can handle large
inputs better and can be configured.
Conflicts materialized in the working copy before
jj 0.19.0may no longerbe parsed correctly. If you are using version 0.18.0 or earlier, check out a
non-conflicted commit before upgrading to prevent issues.
Deprecations
New features
jj git {push,clone,fetch}can now spawn an externalgitsubprocess, viathe
git.subprocess = trueconfig knob. This provides an alternative that,when turned on, fixes SSH bugs when interacting with Git remotes due to
libgit2s limitations #4979.jj describenow accepts--edit.jj evologandjj op lognow accept--reversed.jj restorenow supports-i/--interactiveselection.jj file listnow supports templating.There is a new
builtin_op_log_onelinetemplate alias you can pass tojj op log -Tfor a more compact output. You can useformat_operation_onelineandformat_snapshot_operation_onelineto customize parts of it.New template function
config(name)to access to configuration variable fromtemplate.
New template function
pad_centered()to center content within a minimumwidth.
Templater now supports
list.filter(|x| ..)method.The
diffcommit template keyword now supports custom formatting viadiff.files(). For example,diff.files().map(|e| e.path().display())printschanged file paths.
The
diff.stat()template method now provides methods to get summary values.jj logcan now show cryptographic commit signatures. The output can becontrolled by the
ui.show-cryptographic-signatures=trueconfig knob. Thesignature template can be customized using
format_detailed_cryptographic_signature(signature)andformat_short_cryptographic_signature(signature).New
git.sign-on-pushconfig option to automatically sign commits which arebeing pushed to a Git remote.
New
git.push-new-bookmarksconfig option to push new bookmarks without--allow-new.jj statusnow shows untracked files when they reside directly under atracked directory. There's still an issue that files under untracked
directories aren't listed. #5389
New
merge-tools.<TOOL>.diff-expected-exit-codesconfig option to suppresswarnings from tools exiting with non-zero exit codes.
New
fix.tools.TOOL.enabledconfig option to enable/disable tools. This isuseful for defining disabled tools in user configuration that can be enabled
in individual repositories with one config setting.
Added
--intoflag tojj restore, similarly tojj squashandjj absorb. It is equivalent to--to, but--intois the recommended name.Italic text is now supported. You can set e.g.
color.error = { fg = "red", italic = true }in your config.New
author_name/author_email/committer_name/committer_email(pattern)revset functions to match either name or email field explicitly.
New
subject(pattern)revset function that matches first line of commitdescriptions.
Conditional configuration now supports
--when.commandsto changeconfiguration based on subcommand.
The Jujutsu documentation site now publishes a schema for the official
configuration file, which can be integrated into your editor for autocomplete,
inline errors, and more.
Please see the documentation for more
on this.
Fixed bugs
jj git fetchwith multiple remotes will now fetch from all remotes beforeimporting refs into the jj repo. This fixes a race condition where the
treatment of a commit that is found in multiple fetch remotes depended on the
order the remotes were specified.
Fixed diff selection by external tools with
jj split/commit -i FILESETS.#5252
Conditional configuration now applies when initializing new repository.
#5144
[diff.<format>]configuration now applies to.diff().<format>()committemplate methods.
Conflicts at the end of files which don't end with a newline character are
now materialized in a way that can be parsed correctly.
#3968
Bookmark and remote names written by
jj git clonetorevset-aliases.'trunk()'are now escaped if necessary.#5359
Contributors
Thanks to the people who made this release happen!
This discussion was created from the release v0.26.0.
Beta Was this translation helpful? Give feedback.
All reactions