用途
Jujutsu(命令:jj)是一个版本控制系统(VCS),设计目标是让初学者和有经验的用户都易于使用。它使用 Git 仓库作为存储,同时提供与 Git 不同的用户体验。该技能包含来自 jj 仓库的完整官方文档,用于帮助用户了解、安装、配置和使用 jj,以及从 Git 迁移、与 GitHub/Gerrit 协作、排查问题等。
主要能力与核心概念
- 工作副本即提交(working-copy-as-a-commit):工作副本始终是一个提交(显示为 @),改动在工作时自动提交,无需显式 commit 命令(使用 jj describe 添加描述信息),使用 jj new 开始新变更。
- 操作日志与撤销(operation log & undo):每个 jj 操作(提交、变基、推送等)都会被记录,可用 jj op log 查看操作历史,用 jj undo 撤销上一个操作,用 jj op restore 恢复到任意先前状态。
- 自动变基(automatic rebase):修改某个提交时,其后代会自动变基。
- 一等公民冲突(first-class conflicts):冲突被存储在提交中,而不仅在 工作副本中;可以提交有冲突的变更并稍后解决,冲突解决会通过变基传播,使用 jj resolve 进行交互式解决。
- 无暂存区:简化工作流,没有 Git 的索引/暂存复杂度。
- Git 兼容:可与现有 Git 仓库以及 GitHub 等平台协作。
- Revsets:用于选择提交的强大语言(类似 Mercurial revsets),可用于 jj log -r、jj show、jj rebase 等命令,支持布尔运算、函数和组合。
- Bookmarks:类似 Git 分支但更简单,变更可以没有 bookmark(匿名分支),bookmark 只是指针,并非工作流必需,Git 分支会被导入为 bookmark。
- Templates:使用模板语言自定义输出格式。
使用方式
文档结构按主题组织,常见使用模式包括:
- 入门:查看 tutorial.md 和 install-and-setup.md。
- 从 Git 迁移:查看 git-comparison.md 和 git-command-table.md。
- 理解概念:查看 glossary.md 及相关概念文档(working-copy、conflicts 等)。
- 配置 jj:查看 config.md。
- 与 GitHub 协作:查看 github.md。
- 选择修订:查看 revsets.md。
- 自定义输出:查看 templates.md。
- 处理冲突:查看 conflicts.md。
- 排查问题:查看 FAQ.md。
- 撤销错误:查看 operation-log.md。
- 理解架构:查看 technical/architecture.md。
常用命令示例(保留原文):
# Clone a Git repository
jj git clone <url>
# Check status
jj st # or jj status
# Create a new change
jj new
# Edit a change description
jj describe
# Show change log
jj log
# Undo last operation
jj undo
# Show operation log
jj op log
# Abandon a change
jj abandon
# Move changes between commits
jj squash # move changes into parent
jj move # move changes to another commit
# Rebase changes
jj rebase -r <revision> -d <destination>
# Resolve conflicts
jj resolve # interactive conflict resolution
# Fetch from Git remote
jj git fetch
# Push to Git remote
jj git push
# Import Git branches as bookmarks
jj bookmark track <name>@<remote>
# Common revset expressions
@ # working copy commit
@- # parent of working copy
main@origin # bookmark from remote
::@ # ancestors of working copy
@:: # descendants of working copy
~empty() # non-empty changes
适用场景
- 希望使用 Git 兼容但工作流更简化的版本控制系统的开发者。
- 需要频繁撤销、实验、自动变基和冲突管理的开发工作流。
- 从 Git 迁移到 jj 的用户。
- 与 GitHub 仓库和拉取请求、Gerrit 代码审查系统协作。
- 需要理解 jj 架构、并发处理、冲突处理等技术细节的开发者。
- 希望为 jj 贡献代码或了解其路线图、治理、安全策略的用户。
限制与注意事项
- Jujutsu 是实验性的,但由开发者积极开发并每日使用。
- Git 兼容性是稳定的,可安全用于现有 Git 工作流。
- 部分功能是实验性的(请查看 README 警告)。
- 可能发生破坏性变更,但会在 CHANGELOG 中记录。
- 社区活跃于 Discord、GitHub Discussions 和 IRC(Libera Chat 上的 #jujutsu)。
资源
- 主页:https://jj-vcs.github.io/jj
- GitHub:https://github.com/jj-vcs/jj
- Discord:https://discord.gg/dkmfj3aGQN
- 文档:https://jj-vcs.github.io/jj/latest/
- Steve Klabnik 的教程:https://steveklabnik.github.io/jujutsu-tutorial/
- Chris Krycho 的 YouTube 系列:https://www.youtube.com/playlist?list=PLelyiwKWHHAq01Pvmpf6x7J0y-yQpmtxp