命令行工具的"文艺复兴"仍在继续:开发者们用更安全、更快、更符合直觉的现代实现,逐一取代几十年前的老工具。本期推荐三款 Rust 编写的现代工作流工具——版本控制 jj、开发环境管理器 mise、任务运行器 just。三者都是三万星以上的成熟项目,彼此独立,组合起来恰好覆盖"改代码 → 配环境 → 跑任务"的完整日常。
一、jj(Jujutsu):与 Git 无缝共存的下一代版本控制
项目地址:https://github.com/jj-vcs/jj Star 数:约 32.4K | 协议:Apache-2.0 | 语言:Rust
jj 最反直觉也最迷人的设计是:没有暂存区,工作副本本身就是一个提交。你随时都工作在一条真实的变化上,改完直接 jj describe 写描述、jj new 开下一条变更,历史改写是日常操作而不是"高危动作"。几个核心亮点:
- 冲突是一等公民:合并冲突被显式记录为对象,可以提交、推送、稍后再解决,而不是阻塞整个操作——这在 Git 里不可想象;
- revset 表达式语言:用一套查询语言挑选提交集合,配合模板语言自定义输出格式;
- 匿名分支与自动追踪:不必为每个小改动绞尽脑汁起分支名;
- 完全兼容 Git:以 Git 仓库为存储后端,可以直接克隆 GitHub 项目,同事继续用 Git 协作互不影响。jj 团队自己就用 jj 开发 jj。
安装与上手:
brew install jj # 或 cargo install jj-cli --locked
jj git clone https://github.com/your/repo
jj st # 查看状态
jj describe -m "第一次提交"
jj new # 开启下一条变更
适用场景:频繁改写历史、喜欢主干开发、被 git add/stash/rebase 的心智负担折磨过的开发者。
二、mise:一个 toml 文件管齐工具链、环境变量与任务
项目地址:https://github.com/jdx/mise Star 数:约 35.8K | 协议:MIT | 语言:Rust
mise 的名字来自法语 mise-en-place("各就其位",烹饪术语)。它把三件事合并到一个 mise.toml:
[tools]
node = "24"
python = "3.14"
"npm:prettier" = "3"
[env]
_.file = ".env"
_.path = "./node_modules/.bin"
[tasks.build]
description = "构建应用"
run = "npm run build"
一个文件同时声明工具版本、环境变量和任务,在你的 shell、编辑器和 CI 中表现完全一致。它实际上是三类老工具的合体:nvm/pyenv/asdf(多语言版本管理)+ direnv(目录级环境变量)+ 简单版的 make(任务运行)。工具源也很灵活,除了内置目录,还能从 cargo、npm、GitHub 直接安装指定版本的工具。
curl https://mise.run | sh # 安装
mise use node@24 # 项目内固定版本
mise run build # 运行任务
mise x python@3.14 -- python # 临时用某个版本执行命令
适用场景:同时维护多语言多项目的开发者、需要可复现 CI 环境的团队。从 nvm/asdf 迁移基本是零成本。
三、just:把项目常用命令做成"菜谱"
项目地址:https://github.com/casey/just Star 数:约 36.6K | 协议:CC0-1.0 | 语言:Rust
just 的定位非常克制:命令运行器,而不是构建系统。语法像 make,但砍掉了时间戳推断和 .PHONY 这些历史包袱。命令写在 justfile 里,just
# justfile
build:
cargo build --release
test target:
cargo test {{target}}
deploy env:
#!/usr/bin/env bash
ansible-playbook -i hosts_{{env}} deploy.yml
值得点名的功能:菜谱可以带参数和选项;支持任意语言的 shebang 菜谱(上面第三条就是 bash,也可以换成 Python);自动加载 .env;从任意子目录调用都能找到 justfile;报错信息具体且带源码上下文;主流 shell 补全齐全。
brew install just # 或 cargo install just
just --list # 列出所有菜谱
just test unit
适用场景:任何"每次都要敲一长串命令"的仓库。它对新人极友好——克隆仓库后 just --list 就知道项目怎么跑;与已有 Makefile 也可以共存。
总结
三件套的共同点很明显:Rust 实现、单二进制、零运行时依赖,并且都把"项目约定"写进文件(仓库/mise.toml/justfile),让团队成员和 CI 天然共享同一套工作流。迁移成本也很低:jj 直接接手现有 Git 仓库;mise 的 toml 十行内替代多个版本管理器;just 与 Makefile 并存互不干扰。如果你的终端日常还停留在 nvm 加 make,建议先从 mise 和 just 入手,尝到甜头后再把 jj 引入个人项目。

评论(0)
暂无评论,来抢沙发~
请 登录 后发表评论