jj jj jj jj jj

Lobsters Hottest 工具

摘要

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

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

缓存时间: 2026/06/30 23:42

# jj jj jj jj jj 来源:https://caiustheory.com/jj-jj-jj-jj-jj/ 2025-12-23 10:00:00 类似于 `git git git git git`(https://caiustheory.com/git-git-git-git-git/),如果你在使用 `jj`(https://www.jj-vcs.dev/)时不小心在命令行中多打了一个 `jj`,它会报错。在下面这个例子中,我们试图拉取当前正在编辑的变更集的 ID: ``` $ jj jj show -T 'change_id.short()' error: unrecognized subcommand 'jj' Usage: jj [OPTIONS] <COMMAND> For more information, try '--help'. ``` 真烦人。现在我们可以在 shell 中通过别名来解决这个问题,但 `jj` 也允许我们在配置中定义别名(和 git 很像!),再结合 `jj util exec`(https://docs.jj-vcs.dev/latest/cli-reference/#jj-util-exec),我们应该能让它轻松地执行余下的命令行。 仔细想想,第一个 `jj` 会被 shell 执行,所以它已经消失了。第二个 `jj` 则会被当作别名来解析,所以它也没了。剩余的参数会传给这个别名,也就是 `["show", "-T", "change_id.short()"]`,如果我们直接执行这些参数,它会报错说无法将 `show` 作为二进制文件运行。我们可以通过让别名执行 `jj` 再加上这些参数来避免这个问题。 把别名放到 jj 的配置文件中(`jj config edit` 对于编辑这些配置非常有用,或者也可以用 `jj config set` 从 shell 中更新),然后测试一下是否生效。 ``` [aliases] # jj 递归到底 jj = ["util", "exec", "jj"] ``` 让我们再次尝试最初的嵌套命令,看看能不能看到我们可爱的变更 ID: ``` $ jj jj show -T 'change_id.short()' error: unexpected argument '-T' found tip: to pass '-T' as a value, use '-- -T' Usage: jj util exec [OPTIONS] [ARGS]... For more information, try '--help'. ``` 噢。我们的 `-T` 参数被 `jj util exec` 解析了,而不是被我们正在运行的 `jj` 命令所接收。典型的嵌套参数解析问题,当我们试图调用另一个命令时就会遇到这种问题。 幸运的是,shell/exec 对此有一个解决方案:传递 `--` 作为参数,这样就会停止解析之后的所有参数,原样传递下去。据此,我们可以修改别名,让它先运行 `jj util exec`,然后停止解释后续的任何参数。 ``` [aliases] # jj 递归到底 jj = ["util", "exec", "--", "jj"] ``` 现在,无论命令中有多少个嵌套的 `jj`,我们都应该能毫无问题地看到变更 ID 了! ``` $ jj show -T 'change_id.short()' upvqxuzzvxtx $ jj jj show -T 'change_id.short()' upvqxuzzvxtx $ jj jj jj jj jj show -T 'change_id.short()' upvqxuzzvxtx $ jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj show -T 'change_id.short()' upvqxuzzvxtx ``` 快乐地提交吧。

相似文章

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

Lobsters Hottest

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

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

Lobsters Hottest

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

jj v0.41.0 发布

Lobsters Hottest

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

1jehuang/jcode

GitHub Trending (daily)

jcode 是一个开源编码代理工具,专为多会话工作流设计,资源占用低,提供CLI安装方式,并在性能上优于Claude Code和Cursor Agent等现有代理。