SuperAPI AI 工具集

jj-vcs

编程与开发

查看项目

更新于 10-16 02:11

技能介绍

用途

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