v0.30.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
-
The experimental support from release 0.29.0 for transferring the change ID
to/from Git remotes has been enabled by default. The change ID is stored in
the Git commit itself (in a commit header calledchange-id), which means
it will be transferred by regulargit pushetc. Please let us know if you
run into any problems with it. You can disable it setting
git.write-change-id-header. Note that some Git remotes (e.g GitLab) and
some Git commands (e.g.git rebase) do not preserve the change ids when
they rewrite commits. -
jj rebasenow automatically abandons divergent commits if another commit
with the same change ID is already present in the destination with identical
changes. -
jj splithas gained--message,--insert-before,--insert-after, and
--destinationoptions. -
jj evologcan show associated operations for commits created by new jj
versions.
Breaking changes
-
The old
libgit2code path for fetches and pushes has been removed,
and thegit.subprocesssetting along with it. -
In templates, bookmark/tag/remote names are now formatted in revset symbol
notation. The type ofbookmark.remote()is changed toOption<_>.
bookmark.remote() == "foo"still works, butbookmark.remote().<method>()
might needif(bookmark.remote(), ..)to suppress error. -
jj rebasenow automatically abandons divergent commits if another commit
with the same change ID is already present in the destination with identical
changes. To keep these divergent commits, use the--keep-divergentflag. -
The deprecated
--skip-emptyflag forjj rebasehas been removed. Use the
--skip-emptiedflag instead. -
The deprecated
jj branchsubcommands have been removed. Use thejj bookmarksubcommands instead. -
jj util completionnow requires the name of the shell as a positional
argument and no longer produces Bash completions by default. The deprecated
optional arguments for different shells have been removed. -
(Update: this entry was mistakenly omitted in the release notes previously)
External diff tools are now run in the temporary directory containing
the before (left) and after (right) directories, making diffs appear
more pleasing for tools that display file paths prominently. Users can
opt out of this by settingmerge-tools.<tool>.diff-do-chdir = false,
but this will likely be removed in a future release. Please report any
issues you run into.
Deprecations
-
The
ui.diff.formatandui.diff.toolconfig options have been merged as
ui.diff-formatter. The builtin format can be specified as:<format>
(e.g.ui.diff-formatter=":git"for Git diffs.) -
The
.normal_hex()method will be removed from theCommitIdtemplate type.
It's useful only for theChangeIdtype.
New features
-
jj splithas gained a--messageoption to set the description of the
commit with the selected changes. -
jj splithas gained the ability to place the revision with the selected
changes anywhere in the revision tree with the--insert-before,
--insert-afterand--destinationcommand line flags. -
Added
git.track-default-bookmark-on-clonesetting to control whether to
track the default remote bookmark onjj git clone. -
Templates can now do arithmetic on integers with the
+,-,*,/, and
%infix operators. -
Evolution history is now stored in the operation log.
jj evologcan show
associated operations for commits created by new jj versions.
Fixed bugs
-
Work around a git issue that could cause subprocess operations to hang if the
core.fsmonitorgitconfig is set in the global or system gitconfigs.
#6440 -
jj parallelizecan now parallelize groups of changes that start with an
immutable change, but do not contain any other immutable changes. -
jjwill no longer warn about deprecated paths on macOS if the configured
XDG directory is the deprecated one (~/Library/Application Support). -
The builtin diff editor now correctly handles splitting changes where a file
is replaced by a directory of the same name.
#5189
Packaging changes
- Due to the removal of the
libgit2code path, packagers should remove any
dependencies onlibgit2,libssh2, Zlib, OpenSSL, andpkg-config, and
ensure they are not setting the Cargogit2orvendored-opensslfeatures.
Contributors
Thanks to the people who made this release happen!
- Alper Cugun (@alper)
- Austin Seipp (@thoughtpolice)
- Benjamin Brittain (@benbrittain)
- Benjamin Tan (@bnjmnt4n)
- Bryce Berger (@bryceberger)
- Colin Nelson (@orthros)
- Doug Stephen (@dljsjr)
- Emily (@emilazy)
- Eyvind Bernhardsen (@eyvind)
- Felix Geisendörfer (@felixge)
- Gaëtan Lehmann (@glehmann)
- Ilya Grigoriev (@ilyagr)
- Isaac Corbrey (@icorbrey)
- Jonas Greitemann (@jgreitemann)
- Josep Mengual (@truita)
- kkoang (@kkoang)
- Manuel Mendez (@mmlb)
- Marshall Bowers (@maxdeviant)
- Martin von Zweigbergk (@martinvonz)
- Mateus Auler (@mateusauler)
- Michael Pratt (@prattmic)
- Nicole Patricia Mazzuca (@strega-nil)
- Philip Metzger (@PhilipMetzger)
- Scott Taylor (@scott2000)
- T6 (@tjjfvi)
- Vincent Ging Ho Yim (@cenviity)
- Winter (@winterqt)
- Yuya Nishihara (@yuja)