使用 jj 生成更好的分支名称

Lobsters Hottest 工具

摘要

本文介绍了 jj 版本控制系统的一个模板别名,通过将提交描述转换为 slug 来生成更易读的分支名称,从而改善默认基于变更 ID 的命名方式的可用性。

<p><a href="https://lobste.rs/s/r4xf2n/better_generated_branch_names_with_jj">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/05/19 20:45

# 用 `jj` 生成更好的分支名 来源:https://ddbeck.com/notes/jj-git-push-bookmark-template/ `jj` 版本控制系统生成的分支名总让人觉得差点意思。下面是我改进的方案。 我最近一直在用 `jj`(Jujutsu (https://docs.jj-vcs.dev/latest/)),一个兼容 Git 的版本控制系统。用得挺顺手的。今天尤其喜欢它的可配置性。 出于多种原因,`jj` 预期并鼓励使用匿名分支。但如果你要推送到一个 Git 仓库,匿名分支就得有个名字(`jj` 中叫“书签”,Git 中叫“分支”)。`jj` 命令行界面提供了一种简写,可以自动推送到给定变更并自动生成名称。例如,`jj git push --change xyz` 会将 ID 为 `xyz` 的修订推送到名为 `push-xyz` 的 Git 分支。 作为默认行为,突出变更 ID 是合理的,因为 `jj` CLI 经常显示和使用这些 ID。但假设之后我在 GitHub 网站上查看仓库的分支列表,`push-xyz` 到底代表什么实际工作?我记不住,也不想费劲去记。 我修改了配置来解决这个问题。我写了一个新的模板别名 (https://docs.jj-vcs.dev/latest/templates/#configuration),`slugify()`,并修改了 `git_push_bookmark` 模板来使用它: ``` [template-aliases] "slugify(str)" = ''' truncate_end( 65, str.first_line() .replace(regex:'[^[[:alnum:]].]', '-') .replace(regex:'-{2,}', '-') .replace(regex:'\.{2,}', '.') .replace(regex:'(^-+|-+$)', '') .lower() ) ''' [templates] git_push_bookmark = 'slugify(description) ++ "/" ++ change_id.short()' ``` 现在,如果我运行 `jj git push --change ozkspkuyzpwu`,`jj` 会根据变更的描述(如果你来自 Git 世界,就是提交信息)生成一个短横线分隔标识(slug (https://en.wikipedia.org/wiki/Clean_URL#Slug))风格的名称。在本例中,它会生成 `add-note-about-jj-bookmark-templates/ozkspkuyzpwu`。这样更易读,同时保留了与 `jj` CLI 中显示的修订 ID 的链接。 如果我要推送到与他人共享的仓库,我会改为将我的分支放入自己的命名空间: ``` [templates] git_push_bookmark = '"ddbeck/" ++ slugify(description) ++ "/" ++ change_id.short()' ``` 有一件事我没做:确保分支名对 Git 来说是安全的。Git 有一些相当复杂的规则 (https://git-scm.com/docs/git-check-ref-format#_description) 来判断分支名是否有效。我假设如果模板生成了无效的分支名,我会得到一个错误,到那时我将不得不手动创建一个书签。 如果你喜欢这篇文章,欢迎订阅,获取关于文档编写、技术写作以及文档即代码的最新动态。订阅后,你还会收到《30 分钟信息救援》(https://ddbeck.com/30m-info-rescue/),这是一本在时间紧迫时采访领域专家的简短指南。 订阅即可收到不定期文章和优惠。我不会出售、出租或泄露你的个人信息。可随时退订。详情请阅读我的隐私政策 (https://ddbeck.com/privacy/)。 不想收到更多邮件?可以订阅我的 RSS 订阅源 (https://ddbeck.com/feed.xml)。

相似文章

jj jj jj jj jj

Lobsters Hottest

一篇博客文章演示了如何通过在 jj 配置文件中创建递归别名,并利用 'util exec --' 传递参数,来修复在 jj 版本控制系统中意外输入 'jj jj' 时出现的错误。

Git history 命令值得更多关注

Hacker News Top

文章重点介绍了新的 `git history` 命令及其 `fixup`、`reword` 和 `split` 子命令,这些命令提供了原子化且感知分支的提交历史编辑功能,带来了类似 jj 的益处,而无需切换版本控制系统。

我们最终没有使用jj的(微不足道的)原因

Lobsters Hottest

Gradle解释了为何决定不采用Jujutsu (jj)作为其主要版本控制系统:jj不遵循.gitattributes,导致在Windows上像gradlew.bat这样的文件因行尾不匹配而持续出现虚假修改。他们继续使用git worktree替代。

JJ LSP 后续

matklad

作者描述了即将推出的 LSP 3.18 Text Document Content Request 功能如何通过提供虚拟文档,为 jj (Jujutsu VCS) 实现不那么 hacky 的 Magit 风格用户体验。

jj v0.41.0 发布

Lobsters Hottest

Jujutsu (jj) v0.41.0 已发布,这款实验性版本控制系统迎来了更新,旨在提升易用性和冲突处理能力。