← 返回日报
略读 预计 4 分钟

jujutsu 0.44.0

摘要

jujutsu 0.44.0 发布说明,主要亮点是稳定支持标签的获取与推送,并引入标签跟踪机制;同时包含多项破坏性变更,如 git fetch 行为调整、模板函数返回类型变化、文件搜索输出格式改变等。新功能包括 merge point () revset 函数、workspace list 显示根目录、try () 模板函数、jj run 的多个新选项(--passthrough、--ignore-changes、--ignore-errors)、文件搜索行号支持、push --allow-conflicts、tag track / untrack 命令等,并修复了若干 bug。

荐读理由

如果你正在使用或评估 jj,本版本新增的标签跟踪、jj run 的 --passthrough 和 --ignore-errors 选项、文件搜索行号等功能可直接迁移到你的工作流;但若你未使用 jj,此更新不构成关键信息,属于间接相关。

原文

About

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

Release highlights

  • Support for fetching and pushing tags has now been stabilized. Tags can be tracked or untracked just like bookmarks. Tracked tags are pushed by default.

Breaking changes

  • jj git fetch now fetches tags the same way it fetches bookmarks. Tags are fetched as <name>@<remote>, and these remote tags are automatically tracked by local tags of the same name. Running jj git fetch in an existing repository will re-fetch all tags to initialize the tracking state.

  • Git's tagOpt is no longer respected. To disable tag fetching, set remotes.<name>.fetch-tags = '~*' in the jj configuration.

  • jj git clone --fetch-tags=all|none|included is removed in favor of --tag=PATTERN.

  • jj git push --all now pushes all tags in addition to bookmarks.

  • The WorkspaceRef.root() and RepoPath.absolute() template functions now return Option<FsPath> and FsPath respectively, instead of String. The path keyword in jj config list templates now returns Option<FsPath>.

  • jj file search now prints every matched line prefixed by the file path, instead of only the file paths of files containing a match. Use --name-only for the previous behavior. #9399

  • Passing an argument more than once is no longer an error. The last occurrence wins, so jj --no-pager --no-pager version and jj log -n 5 -n 10 now work, and an argument baked into an alias or a wrapper can be given explicitly as well. Arguments that can be specified multiple times, such as --config and jj log -r, are unaffected and still collect all of their values. #8101 #9859

Deprecations

None

New features

  • New merge_point() revset function which (similar to fork_point) finds the point where multiple branches merge.

  • jj workspace list now shows workspace roots by default. The output can be customized with templates.workspace_list or -T, and WorkspaceRef.root() returns an optional FsPath value. #9713, #9826

  • New try(expr, fallback...) template function to suppress runtime errors.

  • jj run now processes revisions from oldest to newest by default. The start order is guaranteed: each revision begins execution only after the previous one has started, even with --jobs higher than 1.

  • jj run gained a --passthrough flag that connects the subprocess's stdout/stderr directly to the terminal instead of capturing output.

  • jj run gained a --ignore-changes flag to avoid editing any revisions even if the command modifies the working copy.

  • jj run gained a --ignore-errors flag to continue running against the remaining revisions even if the command exits with a nonzero exit code.

  • jj file search now supports -n/--line-number to prefix each match with its 1-based line number within the file.

  • jj git push gained a --allow-conflicts flag to allow pushing commits containing conflicts.

  • New jj tag track/untrack commands to associate local tags with remotes. Note that fetched tags are tracked by default.

  • Added builtin_log() revset alias for the built-in default jj log revset. revsets.log now defaults to builtin_log(), so custom log revsets can reuse the built-in default instead of copying its full expression.

  • Added config option diff.stat.max-bar-width for use with --stat to limit the ++-- bar width. In the templating language, diff.stat() can optionally take a second (positional or named) argument max_bar_width for an equivalent effect.

  • jj absorb now supports --interactive/-i/--tool to let you interactively choose which hunks from the source to consider for absorption. This is useful when you only want to absorb part of a commit without first splitting it. Any hunks that are not selected or cannot be absorbed remain in the source commit.

Fixed bugs

  • Recursive alias definitions are detected more precisely. jj can now expand aliases that are simply repeated. For example, with the alias jj = [], the command jj jj jj will resolve to jj. Aliases can also fall back to the default command. For example, with the alias i = ["--ignore-working-copy"], jj i will resolve to jj --ignore-working-copy.

  • Git temporary files are now cleaned up more reliably in the presence of signals (e.g. Ctrl-C). This should reduce the rate of "Could not acquire lock for index file" errors. (#7530)

  • Fixed Git HEAD mismatch after the working copy became immutable. #9827

  • jj now creates a new working-copy revision as soon as the one of the current workspace becomes immutable, as well as during snapshotting. This brings the behavior closer to jj 0.42 and earlier.

  • Snapshotting no longer fails if the working copy contains a path whose name isn't valid UTF-8. Such paths can't be tracked, so they are now skipped and reported as a warning instead. #9774

  • Fixed failure when reading configuration in copied repo with an empty repo-level configuration directory.

  • jj diff and jj status no longer omit a rename or copy in a merge commit when the renamed source is present in more than one parent. The identical copy record reported for each parent was mistaken for a conflict and discarded. #9752

  • jj run no longer panics when its revset includes a conflicted commit. The conflict is now preserved in the rewritten commit. #9747

  • Fixed a panic when passing overly-large length parameters to ID templater functions (commit_id.short(), commit_id.shortest(), etc.). #9833

  • jj git import and export in colocated workspaces are now disabled by default. These commands usually do nothing, but they had a race condition.

Contributors

Thanks to the people who made this release happen!

Lobsters · 2 赞 · 2 评 讨论 → 阅读原文 →

这条对你有帮助吗?