v0.29.0
About
jj is a Git-compatible version control system that is both simple and powerful. See the installation instructions to get started.
Release highlights
- Experimental support for transferring the change ID to/from Git remotes behind configuration
settinggit.write-change-id-header
. If this is enabled, the change ID will be stored in the Git
commit itself (in a commit header calledchange-id
), which means it will be transferred by
regulargit push
etc. This is an evolving feature that currently defaults to "false". This
default will likely change in the future as we gain confidence with forge support and user
expectations.
Breaking changes
-
jj git push -c
/--change
no longer moves existing local bookmarks. -
The
editor-*.jjdescription
files passed to your editor by e.g.jj describe
are now written to your system's temporary directory instead of.jj/repo/
.
Deprecations
-
git.subprocess = false
has been deprecated, and the oldlibgit2
code path for fetches and pushes will be removed entirely in 0.30.
Please report any remaining issues you have with the Git
subprocessing path. -
ui.default-description
has been deprecated, and will be migrated to
template-aliases.default_commit_description
. Please also consider using
templates.draft_commit_description
,
and/ortemplates.commit_trailers
. -
On macOS, config.toml files in
~/Library/Application Support/jj
are
deprecated; one should instead use$XDG_CONFIG_HOME/jj
(defaults to~/.config/jj
)
New features
-
Color-words diff has gained an option to compare conflict pairs without
materializing. -
jj show
patches can now be suppressed with--no-patch
. -
Added
ui.bookmark-list-sort-keys
setting to configure default sort keys for the
jj bookmark list
command. -
New
signed
revset function to filter for cryptographically signed commits. -
jj describe
,jj commit
,jj new
,jj squash
andjj split
add the
commit trailers, configured in thecommit_trailers
template, to the commit
description. Use cases include DCO Sign Off and Gerrit Change Id. -
Added
duplicate_description
template, which allows customizing the descriptions
of the commitsjj duplicate
creates. -
jj absorb
can now squash a deleted file if it was added by one of the
destination revisions. -
Added
ui.streampager.show-ruler
setting to configure whether the ruler should be
shown when the builtin pager starts up. -
jj git fetch
now warns instead of erroring for unknowngit.fetch
remotes
if other remotes are available. -
Commit objects in templates now have
trailers() -> List<Trailer>
, the Trailer
objects havekey() -> String
andvalue() -> String
. -
jj config edit
will now roll back to previous version if a syntax error has been introduced in the new config. -
When using dynamic command-line completion, revision names will be completed
in more complex expressions. For example, typing
jj log -r first-bookmark..sec
and then pressing Tab could complete the
expression tofirst-bookmark..second-bookmark
.
Fixed bugs
-
Fixed crash on change-delete conflict resolution. #6250
-
The builtin diff editor now tries to preserve unresolved conflicts. #4963
-
Fixed bash and zsh shell completion when completing aliases of multiple arguments. #5377
Packaging changes
- Jujutsu now uses
zlib-rs
, a fast compression library written in Rust. Packagers should remove any dependency on CMake and drop thepackaging
Cargo feature.
Contributors
Thanks to the people who made this release happen!
- Aleksey Kuznetsov (@zummenix)
- Austin Seipp (@thoughtpolice)
- Benjamin Brittain (@benbrittain)
- Benjamin Tan (@bnjmnt4n)
- Caleb White (@calebdw)
- Daniel Luz (@mernen)
- Emily (@emilazy)
- Emily (@neongreen)
- Gaëtan Lehmann (@glehmann)
- George Christou (@gechr)
- Ilya Grigoriev (@ilyagr)
- Jacob Hayes (@JacobHayes)
- Jonas Greitemann (@jgreitemann)
- Josh Steadmon (@steadmon)
- Martin von Zweigbergk (@martinvonz)
- Mateus Auler (@mateusauler)
- Nicole Patricia Mazzuca (@strega-nil)
- Nils Koch (@nilskch)
- Philip Metzger (@PhilipMetzger)
- Remo Senekowitsch (@senekor)
- Sam (@Samasaur1)
- Steve Fink (@hotsphink)
- Théo Daron (@tdaron)
- TimerErTim (@TimerErTim)
- Vincent Ging Ho Yim (@cenviity)
- Winter (@winterqt)
- Yuya Nishihara (@yuja)