jj

jj

革新版本控制 简化流程提升效率

Jujutsu是一款新兴的版本控制系统,兼容Git并引入多项创新。它能自动记录工作副本变更、支持操作撤销、实现自动变基和冲突解决。通过简化版本控制模型,Jujutsu有效提升了团队协作效率。尽管仍处于实验阶段,该系统已在核心开发团队中得到日常应用,适合追求现代版本控制体验的开发团队。

Jujutsu版本控制系统Git兼容工作副本自动重基Github开源项目
<div class="title-block" style="text-align: center;" align="center">

Jujutsu——一个版本控制系统

<br/> Discord

主页   •   安装   •   入门

</div>

简介

Jujutsu是一个强大的软件项目版本控制系统。你可以用它来获取代码副本,跟踪代码变更,最后发布这些变更供他人查看和使用。无论你是新手还是经验丰富的开发者,无论是独自开发全新项目,还是参与大型软件项目的团队合作,它都设计得易于使用。

Jujutsu与大多数其他系统不同,因为它在内部将用户界面和版本控制算法从用于提供内容的存储系统中抽象出来。这使得它可以作为一个具有多种可能物理后端的版本控制系统,这些后端可能有自己的数据或网络模型——比如MercurialBreezy,或者像Google基于云的设计Piper/CitC这样的混合系统。

目前,我们使用Git仓库作为存储层来提供和跟踪内容,**这使得它与许多你喜欢的基于Git的工具兼容,现在就可以使用!**所有核心开发者都在这里的GitHub上使用Jujutsu来开发Jujutsu。它应该也能与你喜欢的Git代码托管平台兼容。

我们将其他版本控制系统的多个不同设计选择和概念结合到一个工具中。一些灵感来源包括:

  • Git:我们努力保持快速——通过敏捷的用户体验、高效的算法、正确的数据结构,以及对细节的关注。默认存储后端使用Git仓库作为"物理存储",以实现广泛的互操作性和便于上手。

  • Mercurial & Sapling:有许多受Mercurial启发的功能,如用于选择提交的revset语言。没有显式的索引或暂存区。分支是像Mercurial一样的"匿名"分支,所以你不需要为每个小变更起名字。重写历史的原语既强大又简单。输出格式化是通过用户可配置的强大模板语言完成的。

  • Darcs:Jujutsu将冲突作为其模型中的一等公民进行跟踪;它们与提交一样是一等公民,而像Git这样的替代方案只是将冲突视为文本差异。虽然不像Darcs那样严格(Darcs基于形式化的补丁理论,而不是快照),但效果是许多形式的冲突解决可以自动执行和传播。

它还添加了几个创新、有用的自身特性:

  • 工作副本作为提交:对文件的更改[自动记录][wcc]为普通提交,并在每次后续更改时进行修改。这种"快照"设计简化了面向用户的数据模型(提交是唯一可见的对象),简化了内部算法,并完全包含了Git的贮藏或索引/暂存区等功能。

  • 操作日志和撤销:Jujutsu记录对仓库执行的每个操作,从提交到拉取再到推送。这使得调试"刚刚发生了什么?"或"我是如何到达这里的?"等问题变得更容易,尤其是当你在帮助同事解答关于他们仓库的这些问题时!而且因为一切都被记录下来,你可以轻松撤销刚刚犯的错误。版本控制终于进入了[20世纪60年代][undo-history]!

  • 自动变基和冲突解决:当你修改一个提交时,每个后代都会自动在新修改的提交之上重新变基。这使得"基于补丁"的工作流程变得轻而易举。如果你在一个提交中解决了冲突,该冲突的解决方案也会传播到后代。实际上,这是一个完全透明的git rebase --update-refsgit rerere的组合版本,由设计支持。

[!警告] 以下功能可供使用,但处于实验阶段;它们可能存在bug、向后不兼容的存储更改和用户界面更改!

  • 安全、并发复制:你是否曾经想过将版本控制的仓库存储在Dropbox文件夹中?或者持续备份仓库到S3?没有?好吧,现在你可以了! 在典型的Git/Mercurial仓库上使用Dropbox等文件系统和rsync等备份工具的根本问题是,它们依赖于本地文件系统操作的原子性、序列化和非并发性,这在分布式文件系统上操作或在持有锁文件时进行并发文件复制(用于备份)等操作时并不成立。

Jujutsu则设计为在并发场景下安全;简单地使用rsync或Dropbox,然后使用生成的仓库不应该导致仓库处于损坏状态。最坏的情况应该只是暴露本地和远程状态之间的冲突,让你来解决它们。

命令行工具目前被称为jj,因为它易于输入和替换(在英语中很少见)。项目被称为"Jujutsu"是因为它与"jj"匹配。

Jujutsu相对年轻,还有很多工作要做。如果你有任何问题,或想讨论未来计划,请加入我们的Discord或在GitHub上发起讨论;开发者会关注这两个渠道。

新闻和更新 📣

  • 2024年2月:发布0.14版本,弃用了"jj checkout"和"jj merge",以及jj init --git,现在称为jj git init
  • 2023年10月:发布0.10.0版本!现包含所有平台的内置合并和差异编辑器,"不可变修订集"以避免意外编辑错误的修订,以及大量改进。
  • 2023年1月:Martin在Git Merge 2022上介绍了Google对Jujutsu的计划!可以查看幻灯片或录像。

相关媒体

  • 2024年3月:Chris Krycho开始了一个关于Jujutsu的YouTube系列。
  • 2024年2月:Chris Krycho发表了一篇名为"jj init"的文章,Steve Klabnik随后发布了Jujutsu教程。
  • 2024年1月:Jujutsu在LWN.net上以"Jujutsu:一个新的、兼容Git的版本控制系统"为题被报道。
  • 2023年1月:Martin在Git Merge 2022上关于Jujutsu的演讲,有视频和相关幻灯片。

wiki还包含了更广泛的媒体引用列表。

入门

[!重要] Jujutsu是一个实验性版本控制系统。虽然Git兼容性是稳定的,大多数开发者每天都在使用它满足所有需求,但可能仍有正在开发的功能、次优的用户体验和工作流程空缺,这可能使它不适用于你的特定用途。

按照安装说明获取和配置jj

开始使用的最佳方式可能是完成教程。另外,请查看Git对比,其中包括jjgit命令的对照表。

随着你对Jujutsu越来越熟悉,以下资源可能会有帮助:

  • 常见问题解答(FAQ)。
  • 术语表。
  • jj help命令(例如jj help rebase)。

如果你正在使用预发布版本的jj,你可能需要参考预发布(主分支)版本的文档。你也可以通过网站的版本切换器从最新发布版本的文档到达那里。当你滚动到任何页面顶部时,版本切换器会在网站头部可见。

特性

与Git兼容

Jujutsu的设计使底层数据和存储模型是抽象的。目前,它有两个后端——一个使用Git仓库进行存储,另一个是原生存储后端。

Git后端功能齐全且得到维护,允许您将Jujutsu用作Git的替代界面。您创建的提交将看起来像常规的Git提交。您随时可以切换回Git。Git支持使用libgit2 C库。

<img src="https://yellow-cdn.veclightyear.com/835a84d5/82bd9846-9e22-45b2-8c02-bdfbc3cb12be.png" />

您甚至可以有一个"并置"的本地仓库,在那里您可以交替使用jjgit命令。

工作副本会自动提交

Jujutsu使用真实的提交来表示工作副本。检出一个提交会在目标提交之上创建一个新的工作副本提交。几乎所有命令都会自动修改工作副本提交。

工作副本作为一个提交意味着命令永远不会因为工作副本不干净而失败(不会出现"错误:您对以下文件的本地更改..."),也不需要使用git stash。此外,由于工作副本是一个提交,命令在工作副本提交上的操作方式与在任何其他提交上相同,因此您可以在完成更改之前设置提交消息。

<img src="https://yellow-cdn.veclightyear.com/835a84d5/5ba1fc71-e02a-4dd2-a549-dd920f09cd0b.png" />

仓库是事实来源

使用Jujutsu时,工作副本的作用比Git小。命令在开始之前会对工作副本进行快照,然后更新仓库,最后更新工作副本(如果工作副本提交被修改)。几乎所有命令(甚至是checkout!)都在仓库中的提交上操作,将工作副本的快照和更新的常见功能留给集中的代码。例如,jj restore(类似于git restore)可以从任何提交恢复到任何提交,而jj describe可以设置任何提交的提交消息(默认为工作副本提交)。

整个仓库都在版本控制之下

您在仓库中执行的所有操作都会被记录,包括操作后仓库状态的快照。这意味着您可以轻松地恢复到早期的仓库状态,或者简单地撤销特定操作(不一定是最近的操作)。

<img src="https://yellow-cdn.veclightyear.com/835a84d5/6e1342fd-0ff0-4220-8bc6-18e31b3e7322.png" />

冲突可以记录在提交中

如果操作导致冲突,有关这些冲突的信息将被记录在提交中。操作将成功。然后您可以稍后解决冲突。这种设计的一个结果是不需要继续中断的操作。相反,您可以获得一个单一的工作流程来解决冲突,无论是哪个命令导致的。这种设计还允许Jujutsu正确地变基合并提交(与Git和Mercurial不同)。

基本冲突解决:

<img src="https://yellow-cdn.veclightyear.com/835a84d5/b9313b88-04a7-444b-8ef9-d5ce904945e2.png" />

处理冲突:

<img src="https://yellow-cdn.veclightyear.com/835a84d5/67b7ad5e-a502-45ed-a383-49e2665bad4f.png" />

自动变基

每当您修改一个提交时,旧提交的任何后代都会被变基到新提交上。由于上面描述的冲突设计,即使存在冲突也可以完成这一操作。指向变基提交的分支将被更新。如果工作副本指向变基的提交,它也会被更新。

全面支持重写历史

除了常见的变基命令外,还有jj describe用于编辑任意提交的描述(提交消息)。还有jj diffedit,它允许您编辑提交中的更改而无需检出。要将一个提交拆分为两个,使用jj split。您甚至可以使用jj squash -i --from X --into Y将一个提交中的部分更改移动到任何其他提交中。

状态

该工具功能相当完整,但一些重要功能(如git blame的等效功能)尚未支持。还存在几个性能问题。可能核心开发人员使用的工作流程和设置之外的情况支持得不太好,例如,没有对基于电子邮件的工作流程的原生支持。

如今,所有核心开发人员都使用jj来开发jj。我(Martin von Zweigbergk)自2021年1月初以来几乎只使用jj来开发这个项目。我不需要重新从源代码克隆(我甚至不认为我需要从备份恢复)。

在1.0.0版本之前,工作流程和磁盘格式将会发生变化,并且会有向后不兼容的更改。甚至二进制文件的名称也可能改变(即不再使用jj)。对于任何格式更改,我们将尝试实现透明升级(就像我们对最近的更改所做的那样),或者根据要求提供升级命令或脚本。

相关工作

有几个工具试图解决与Jujutsu类似的问题。详情请参见相关工作

贡献

我们欢迎外部贡献,有很多事情可以做,所以不要害羞。如果您想要一些可以帮助的事情的指导,请随时询问,希望我们都能找到合适的事情。

我们确实有一些针对贡献者的政策和建议。简而言之:

  • 欢迎提交错误报告!
  • 每个合并到 main 分支的提交都会经过代码审查。
  • 请遵守行为准则,并遵守社区指导原则。
  • 有一份强制性的贡献者许可协议(CLA)需要您同意。重要的是,它并不将版权所有权转让给谷歌或任何其他人;它只是赋予我们安全地重新分发和使用您的更改的权利。

谷歌强制性免责声明

我(Martin von Zweigbergk,martinvonz@google.com)于2019年底开始将Jujutsu作为业余项目,现在它已经发展成为我在谷歌的全职项目,有几位其他谷歌员工以各种身份协助开发。话虽如此,这并不是一个谷歌产品

许可证

Jujutsu以开源软件的形式提供,采用Apache 2.0许可证。有关版权和再分发的详细信息,请参阅LICENSE文件。

编辑推荐精选

音述AI

音述AI

全球首个AI音乐社区

音述AI是全球首个AI音乐社区,致力让每个人都能用音乐表达自我。音述AI提供零门槛AI创作工具,独创GETI法则帮助用户精准定义音乐风格,AI润色功能支持自动优化作品质感。音述AI支持交流讨论、二次创作与价值变现。针对中文用户的语言习惯与文化背景进行专门优化,支持国风融合、C-pop等本土音乐标签,让技术更好地承载人文表达。

QoderWork

QoderWork

阿里Qoder团队推出的桌面端AI智能体

QoderWork 是阿里推出的本地优先桌面 AI 智能体,适配 macOS14+/Windows10+,以自然语言交互实现文件管理、数据分析、AI 视觉生成、浏览器自动化等办公任务,自主拆解执行复杂工作流,数据本地运行零上传,技能市场可无限扩展,是高效的 Agentic 生产力办公助手。

lynote.ai

lynote.ai

一站式搞定所有学习需求

不再被海量信息淹没,开始真正理解知识。Lynote 可摘要 YouTube 视频、PDF、文章等内容。即时创建笔记,检测 AI 内容并下载资料,将您的学习效率提升 10 倍。

AniShort

AniShort

为AI短剧协作而生

专为AI短剧协作而生的AniShort正式发布,深度重构AI短剧全流程生产模式,整合创意策划、制作执行、实时协作、在线审片、资产复用等全链路功能,独创无限画布、双轨并行工业化工作流与Ani智能体助手,集成多款主流AI大模型,破解素材零散、版本混乱、沟通低效等行业痛点,助力3人团队效率提升800%,打造标准化、可追溯的AI短剧量产体系,是AI短剧团队协同创作、提升制作效率的核心工具。

seedancetwo2.0

seedancetwo2.0

能听懂你表达的视频模型

Seedance two是基于seedance2.0的中国大模型,支持图像、视频、音频、文本四种模态输入,表达方式更丰富,生成也更可控。

nano-banana纳米香蕉中文站

nano-banana纳米香蕉中文站

国内直接访问,限时3折

输入简单文字,生成想要的图片,纳米香蕉中文站基于 Google 模型的 AI 图片生成网站,支持文字生图、图生图。官网价格限时3折活动

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

下拉加载更多